• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kolejność wyświetlana z kolejki Queue

Object Storage Arubacloud
0 głosów
474 wizyt
pytanie zadane 30 sierpnia 2016 w Java przez Jonki Dyskutant (8,180 p.)
Do mojej kolejki Queue w kodzie użyłem implementacji LinkedList, czyli co pierwsze wchodzi, to pierwsze wychodzi. Więc funkcja .poll() naturalnie wyciąga dane od początku kolejki. Efekt jest oczywisty:

ID: 1

ID: 2

ID: 3

ID: 4

i natknąłem się na inną implementację PriorityQueue, która powinna działać w taki sposób, że to co ostatnie wchodzi, to pierwsze wychodzi, a po wykonaniu programu mam taki sam efekt jak z LinkedList. Wydaje mi się, że ta implementacja powinna wyświetlić

ID: 4

ID: 3

ID: 2

ID: 1

a tak nie jest. Może źle to rozumiem?
komentarz 30 sierpnia 2016 przez MichałGNU Gaduła (4,330 p.)
Mógłbyś pokazać kod?
komentarz 30 sierpnia 2016 przez Jonki Dyskutant (8,180 p.)
Zmieniłem na chwilę implementację tylko dla kolejki ID, bo chciałem z ciekawości sprawdzić jak to właśnie będzie działało.

static void showClients()
	{
		int open = 1;
		
		Queue<Integer> ID = new PriorityQueue<Integer>();
		Queue<String> name = new LinkedList<String>();
		Queue<String> lastName = new LinkedList<String>();
		Queue<Integer> yearOfBirth = new LinkedList<Integer>();
		Queue<String> sex = new LinkedList<String>();
		Queue<Integer> PIN = new LinkedList<Integer>();
		Queue<String> password = new LinkedList<String>();
		Queue<String> leadingQuestion = new LinkedList<String>();
		Queue<String> answer = new LinkedList<String>();
		Queue<Integer> accountBalance = new LinkedList<Integer>();
		
		File file = new File("uzytkownicy.txt");
		Scanner input = null;
		try {
			input = new Scanner(file);
		} catch (FileNotFoundException e) {
			System.out.println();
			System.out.println();
			System.out.print("You can not open the file.");
			
			open = 0;
		}
		
		if(open == 1)
		{
			String line;
			
			while(input.hasNext())
			{
				while(input.hasNext())
				{
					line = input.next();
					
					if(line.equals("ID:"))
					{
						if(input.hasNextInt())
						{
							ID.add(input.nextInt());
						}
					}
					if(line.equals("Imię:"))
					{
						name.add(input.next());
					}
					if(line.equals("Nazwisko:"))
					{
						lastName.add(input.next());
					}
					if(line.equals("Rok_urodzenia:"))
					{
						if(input.hasNextInt())
						{
							yearOfBirth.add(input.nextInt());
						}
					}
					if(line.equals("Płeć:"))
					{
						sex.add(input.next());
					}
					if(line.equals("PIN:"))
					{
						if(input.hasNextInt())
						{
							PIN.add(input.nextInt());
						}
					}
					if(line.equals("Hasło:"))
					{
						password.add(input.next());
					}
					if(line.equals("Pytanie_pomocnicze:"))
					{
						leadingQuestion.add(input.nextLine());
					}
					if(line.equals("Odpowiedz:"))
					{
						answer.add(input.nextLine());
					}	
					if(line.equals("Stan_konta:"))
					{
						if(input.hasNextInt())
						{
							accountBalance.add(input.nextInt());
						}
					}
				}
			}
			
			int size = ID.size();
			
			for(int i = 0 ; i < size; ++i)
			{
				System.out.println("");
				System.out.println("ID: " + ID.poll());
				System.out.println("Name: " + name.poll());
				System.out.println("Last name: " + lastName.poll());
				System.out.println("Year of birth: " + yearOfBirth.poll());
				System.out.println("Sex: " + sex.poll());
				System.out.println("PIN: " + PIN.poll());
				System.out.println("password: " + password.poll());
				System.out.println("Leading Qestion: " + leadingQuestion.poll());
				System.out.println("Answer: " + answer.poll());
				System.out.println("Account balance: " + accountBalance.poll());
				System.out.println("");
			}
		}
	}

 

komentarz 5 września 2016 przez Tomasz90 Nałogowiec (25,140 p.)
PriorityQueue działa tak, że elementy są w niej są umieszczone w naturalnym porządku tzn. inty rosnąco, Stringi alfabetycznie itd. Można zastosować własny komparator. Także stąd taki rezultat.

1 odpowiedź

0 głosów
odpowiedź 30 sierpnia 2016 przez MichałGNU Gaduła (4,330 p.)
Nie korzystaj z takich implementacji jak PriorityQueue.
komentarz 30 sierpnia 2016 przez Jonki Dyskutant (8,180 p.)
Czemu? Dopiero uczę się javy.
komentarz 30 sierpnia 2016 przez MichałGNU Gaduła (4,330 p.)

No właśnie dlatego, że się uczysz. smiley

Nie wiem, jaki jest Twój poziom, ale takie funkcje, jak PriorityQueue zwykle poznaje się po przejściu podstaw i "oswojeniu" się z językiem.

komentarz 30 sierpnia 2016 przez Jonki Dyskutant (8,180 p.)
A mógłbyś napisać dlaczego nie działa to w kodzie, który podałem?
komentarz 30 sierpnia 2016 przez MichałGNU Gaduła (4,330 p.)
Mam problem, bo nie bardzo wiem co jest źle.
komentarz 30 sierpnia 2016 przez Jonki Dyskutant (8,180 p.)

A jest jakaś implementacja, która umożliwi ściąganie z końca. Ostatnie wchodzi, pierwsze wychodzi.

Znalazłem https://docs.oracle.com/javase/7/docs/api/java/util/ArrayDeque.html, ale mam problem, bo w ogóle nie chce mi wykrywać metod. Chciałem użyć np. pollLast(), ale nawet nie pokazuje mi dostępnej takiej metody.

Podobne pytania

0 głosów
1 odpowiedź 104 wizyt
pytanie zadane 18 maja 2020 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 763 wizyt
pytanie zadane 29 kwietnia 2017 w C i C++ przez Łukasz Świtaj Użytkownik (520 p.)
0 głosów
0 odpowiedzi 298 wizyt
pytanie zadane 22 maja 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...