Cau v jave zacinam tak bych prosim chtel poradit:) mam 3 tridy:) jedna trida obsahu HashSet tech ostatnich dvou a potreboval bych poradit jak muzu setridit ten HashSet tech objeku. Diky
Fórum › Java
Trideni Hashsetu
můžeš použít i Pair, tan by seřadit jít měl, nebo použít normálně List a budeš řadit vlastní objekt, kterej bude obsahovat ty 2 třídy
pokud je nějaká možnost tak mě někdo opraví, ale HashSet sortovat nejde.. musel bys ho překonvertovat do jinýho kontejnéru, kterej jde (např. List a další) a pomocí vlastního porovnávacího pravidla budeš prvky řadit
pak jednoduše přes Collections.Sort(...), kde druhej parametr by měl bejt vlastní comparator
Muzes to prosim trochu rozvest:-) v jave se jeste moc nevyznam. V konstruktoru si vytvorim hashset objektu. A kde presne je mam prevest na treba list nejakou metodou?:-) dekuju za radu:-)
Zasláno z mobilního telefonu.
#7 crash41
noo, když máš HashSet, tak převod třeba do Listu je jako
List<String> list = new ArrayList<String>(instance_hashset);
A seřazení prvků je pak jako (pokud obsahují základní datový typy)
Collections.sort(list);
A funkce sort má druhej parametr, kde si můžeš nastavit vlastní porovnání, takže vytvoříš novou třídu, která bude vycházet z Comparatoru
Tohle je hlavně dobrý, když prvky budou nějaký vlastní objekty a né String,int apod.
public class VlastniComparator implements Comparator<TridaA> {
@Override
public int compare(TridaA o1, TridaA o2) {
// zde podle nějakýho pravidla porovnáš objekty
return ...
}
}
// pak jen upravíš funkci sort na
Collections.sort(list, new VlastniComparator());
Kdybys potom opět chtěl List převést do HashSetu, tak by to mělo být podobný
HashSet<String> hash = new HashSet<String>(list);
Ted jsem zkousel udelat tu tridu VlastniComparator a zkusim to zkompilovat a napsalo mi to
VlastniComaparator is not abstract and does not override abstract method compareTo(Utvar) in java.lang.Comparable
tak to uz jsme vyresil:) ale porad mi neni nejak jasne:) kdyz mam v tride Utvar implementovanou metodu
public boolean equals (Object o) {
if (o instanceof Utvar) {
Utvar druha = (Utvar)o;
return zkratka.equals(druha.getZkratka());
}
else return false;
}
Protoze trida Utvar obsaduje jen 2 Stringy jako datovy atributy zkratka a nazev. Musim teda pouzivat tu tridu VlastniComparator a nebo to jde udelat jednoduseji kdyz to chci seradit jen podle te zkratky. Dik
Nebo me napadlo:) slo by tu tridu Utvar upravit popř to převest na List kdyz bych chtel vyzit jen metodu
public class Utvar implements Comparable <Utvar> {
....
public int compareTo(Utvar druhy) {
return zkratka.compareTo(druhy.zkratka);
}
...
}
Tak jsem nejak implementoval tu tridu VlastniComparator()
import java.util.*;
public class VlastniComparator implements Comparator<Utvar> {
@Override
public int compare(Utvar o1, Utvar o2) {
if(o1.getZkratka() == o2.getZkratka()) return 0;
String zkratka = o1.getZkratka();
return zkratka.compareTo(o2.getZkratka());
}
}
Ale presne nevim kde presne volat to
List<Utvar> list = new ArrayList<Utvar>(podrizene);
Collections.sort(list, new VlastniComparator());
HashSet<Utvar> podrizene = new HashSet<Utvar>(list);
Kdyz tam mam jenom rekuzivni metodu na vypis toho HashSetu dik za radu
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Trideni hudby — založil Halbax
Třídění zlomků — založil Antonín Smékal
Třídění čísel — založil Kaja
Trideni jmen — založil Lukáš
Moderátoři diskuze