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

vector sortowanie - java

VPS Starter Arubacloud
0 głosów
165 wizyt
pytanie zadane 26 marca 2021 w Java przez Hubert731 Obywatel (1,650 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 2021 przez Wiciorny Ekspert (269,120 p.)
edycja 26 marca 2021 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 2021 przez Hubert731 Obywatel (1,650 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 2021 przez Hubert731 Obywatel (1,650 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ź 693 wizyt
pytanie zadane 13 czerwca 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 302 wizyt
pytanie zadane 4 listopada 2017 w C i C++ przez WaterMelon Nowicjusz (120 p.)
+3 głosów
3 odpowiedzi 962 wizyt

92,452 zapytań

141,262 odpowiedzi

319,074 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...