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

vector sortowanie - java

Fiszki IT
Fiszki IT
0 głosów
31 wizyt
pytanie zadane 26 marca w Java przez Hubert Wajda Obywatel (1,090 p.)
Witam, czy mógłby mi ktoś przybliżyć działanie metody sortującej własne obiekty w vectorach w javie, mam tu bardziej na myśli sortowanie według "swoich zasad", w c++ pisze się to vec.sort("od którego miejsca ma sortować", "do którego miejsca ma sortować", "wartość boolean kiedy ma sortować"). Czy jest podobna opcja w javie?

1 odpowiedź

0 głosów
odpowiedź 26 marca przez Wiciorny Mędrzec (167,970 p.)
edycja 26 marca przez Wiciorny

Zależy są dwie opcje sortowania, generalnie -> ASCENDING/DESCENDING, ale sortowanie obiektów możesz podyktować przez własne implementacje z wykorzystaniem 

java.util.Comparable i java.util.Comparator.

i podawać warunki po czym obiekty maja być sortowane (na zasadzie pól i ich wartości ) .
Dla przykładu jeśli nie pakujemy tego w stream np . Ale w JAVIE nie używa się za bardzo Vektorów, gdyż Vektorem zastąpiono poprzez interfejs List.  nawet w dokumentacji widać że sama klasa, odpowiednio rozszerza elementu należące do interfejsu 

public class Vector<E> extends AbstractList<E> implements List<E>, 
 // deklarujesz comparator - i sposób jaki ma twoj obiekt porównywać tu jest 
// defaultowo reverse order mozesz zdefiniowac tutaj funkcje z użyciem lambda expression
// gdzie posortujesz według pól boiektu 
Comparator compareMyObject = (a1, a2) -> a1.getName().compareTo(a2.getName())
Comparator comparator = Collections.reverseOrder();
  
// tutaj wywolanie vector i podajesz komparator po którym ma byc sorotwany 
 Collections.sort(vector,comparator);

 

komentarz 26 marca przez Hubert Wajda Obywatel (1,090 p.)

Nie rozumiem działania tego Comparatora, a w liscie takze trzeba tego uzyć. Moze łatwiej bedzie, jak przestawie problem.

package oki;

import java.awt.List;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Vector;

public class Salon_Telefanatic_poprawny {

	static int liczba_tel;

	public static void main(String[] args) {
		liczba_tel = new Scanner(System.in).nextInt();

//		Vector<Telefon> vec = new Vector<>();
//		Telefon tab[] = new Telefon[liczba_tel];
		LinkedList<Telefon> lista = new LinkedList<Telefon>();

		Scanner scan = new Scanner(System.in);
		for (int i = 0; i < liczba_tel; i++) {
			Telefon telefon = new Telefon();
			telefon.producent = scan.next();
			telefon.model = scan.next();
			telefon.pik_x = scan.nextInt();
			telefon.pik_y = scan.nextInt();
			telefon.moment_wprowadzenia = i;
//			vec.addElement(telefon);
//			tab[i] = telefon;
			lista.addLast(telefon);
		}
		scan.close();

	}

	public static boolean CzySortowac(Telefon tel1, Telefon tel2) {
		int dlugosc1 = tel1.producent.length() + tel1.model.length();
		int dlugosc2 = tel2.producent.length() + tel2.model.length();
		long przekatne1 = tel1.pik_y * tel2.pik_x;
		long przekatne2 = tel2.pik_y * tel1.pik_x;
		int moment_wprowadzenia1 = tel1.moment_wprowadzenia;
		int moment_wprowadzenia2 = tel2.moment_wprowadzenia;
		if (dlugosc1 > dlugosc2)
			return true;
		else if (dlugosc1 < dlugosc2)
			return false;
		else if (dlugosc1 == dlugosc2) {
			if (przekatne1 > przekatne2)
				return true;
			else if (przekatne1 < przekatne2)
				return false;
			else if (przekatne1 == przekatne2) {
				if (moment_wprowadzenia1 > moment_wprowadzenia2)
					return true;
				else
					return false;
			}

		}
		return false;
	}


}

class Telefon {
	String producent;
	String model;
	int pik_x;
	int pik_y;
	int moment_wprowadzenia;
}

A więc tak, mam Liste obiektów, chce ją posortować wedlug metody CzySortowac() (kiedy bedzie zwracala wartosc true).
Przyklad:
Wejscie: 

6
Samsung Note 1440 3040
TPhon2 12large1 1243 2688 
iPhone 11ProMax 1242 2688 
TPhon1 12SmallC 1243 2688 
Huawei P30 1080 2340 
TPhon3 12med123 1243 2688

Wyjscie:
Huawei P30 1080 2340
Samsung Note 1440 3040
TPhon2 12large1 1243 2688
TPhon1 12SmallC 1243 2688
TPhon3 12med123 1243 2688
iPhone 11ProMax 1242 2688

komentarz 26 marca przez Hubert Wajda Obywatel (1,090 p.)
A czy miałby ktos pomysl jak to posortowac? Sortowanie bablekowe dziala poprawnie, ale tylko przy malej ilosci obiektow, jest jakis szybszy sposob niz ten?

Podobne pytania

0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 13 czerwca 2020 w C i C++ przez amtrax Dyskutant (8,990 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 4 listopada 2017 w C i C++ przez WaterMelon Nowicjusz (120 p.)
+3 głosów
3 odpowiedzi 689 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

84,794 zapytań

133,600 odpowiedzi

296,073 komentarzy

56,043 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...