TreeSet und benutzerdefinierte Java-Typsortierung
) zeigt, dass TreeSet nach String sortierbar ist 1. Die unterste Ebene der TreeMap-Sammlung ist tatsächlich Es ist eine TreeMap
2. Die unterste Ebene der TreeMap-Sammlung ist ein Binärbaum3. Die in der TreeSet-Sammlung platzierten Elemente entsprechen der Platzierung im Schlüsselteil der TreeMap-Sammlung 4. Die Elemente in der TreeSet-Sammlung sind ungeordnet und können nicht wiederholt werden, aber sie können nach den Elementen angeordnet werden. Die automatische Sortierung nach Größe
heißt: sortierbare Sammlung
Beispiel: Schreiben Sie ein Programm, um Daten aus der Datenbank abzurufen und Benutzerinformationen auf der Seite anzuzeigen Aufsteigende oder absteigende Reihenfolge des Geburtstags.
Zu diesem Zeitpunkt können Sie die TreeSet-Sammlung verwenden, da die TreeSet-Sammlung der Reihe nach eingefügt und herausgenommen wird. //创建一个TreeSet集合
TreeSet<string> ts=new TreeSet();
//添加Stringts.add("zhangsan");ts.add("lisi");ts.add("wangwu");ts.add("zhangsi");ts.add("wangliu");for(String s:ts){
//按照字典顺序排序
System.out.print(s+" ");
}
TreeSet<integer> ts2=new TreeSet();ts2.add(100);ts2.add(200);ts2.add(900);ts2.add(800); ts2.add(600);ts2.add(10);for(Integer i:ts2){
//按照升序排序
System.out.print(i+" ");}</integer></string>
TreeSet kann benutzerdefinierte Typen nicht sortieren
Kann TreeSet benutzerdefinierte Typen sortieren?
Im folgenden Programm kann die Person-Klasse nicht sortiert werden, da die Vergleichsregeln zwischen Person-Objekten nicht angegeben sind. Es wird nicht angegeben, wer älter und wer jünger ist.public class TreeSetTest02 {
public static void main(String[] args) {
Person p1=new Person(50);
Person p2=new Person(10);
Person p3=new Person(20);
Person p4=new Person(60);
Person p5=new Person(40);
Person p6=new Person(30);
TreeSet<person> persons=new TreeSet();
persons.add(p1);
persons.add(p2);
persons.add(p3);
persons.add(p4);
persons.add(p5);
persons.add(p6);
for(Person p:persons){
System.out.println(p);
}
}}class Person{
int age;
public Person(int age){
this.age=age;
}
@Override
public String toString() {
return "Person [age=" + age + "]";
}}</person>
Exception in thread "main" java.lang.ClassCastException: testCollection.Person cannot be cast to java.lang.Comparable
Person-Klasse die java.lang, Comparable-Schnittstelle nicht implementiert
//und die Methode „compareTo“ implementieren, „equals“ muss nicht geschrieben werden public class TreeSetTest04 {
public static void main(String[] args) {
Customer p1=new Customer(50);
Customer p2=new Customer(10);
Customer p3=new Customer(20);
Customer p4=new Customer(60);
Customer p5=new Customer(40);
Customer p6=new Customer(30);
TreeSet<customer> customers=new TreeSet();
customers.add(p1);
customers.add(p2);
customers.add(p3);
customers.add(p4);
customers.add(p5);
customers.add(p6);
for(Customer p:customers){
System.out.println(p);
}
}
}
//放在TreeSet集合中的元素需要实现java.lang.Comparable接口//并且实现compareTo方法,equals可以不写
class Customer implements Comparable<customer>{
int age;
public Customer(int age){
this.age=age;
}
@Override
public String toString() {
return "Customer [age=" + age + "]";
}
//需要在这个方法中编写比较的逻辑,或者说比较的规则,按照什么进行比较。
//k.compareTo(t.key)
//拿着参数k和集合中的每个k进行比较,返回值可能是>0,age2){// return 1;// }else{// return -1;// }
return this.age-c.age; //>,</customer></customer>
//Parameter k mit jedem k in der Menge vergleichen. Der Rückgabewert kann >0, //
Die Vergleichsregel wird weiterhin implementiert von Programmierer: Zum Beispiel in aufsteigender Reihenfolge nach Alter oder in absteigender Reihenfolge nach Alter
public class TreeSetTest05 { public static void main(String[] args) { TreeSet<vip> vips=new TreeSet(); vips.add(new Vip("zhangsi",20)); vips.add(new Vip("zhangsan",20)); vips.add(new Vip("king",18)); vips.add(new Vip("soft",17)); for(Vip vip:vips){ System.out.println(vip); } }}class Vip implements Comparable<vip>{ String name; int age; public Vip(String name,int age){ this.name=name; this.age=age; } @Override public String toString() { return "Vip [name=" + name + ", age=" + age + "]"; } //compareTo方法的返回值很重要: //返回0表示相同,value会覆盖 //>0,会继续在右子树上找 //Selbstausgleichende Binärbaumstruktur<p><br><br>1 .<br>Selbstausgleichender Binärbaum, gespeichert nach dem Prinzip von klein links und groß rechts<strong></strong> 2. Es gibt drei Möglichkeiten, einen Binärbaum zu durchlaufen</p> Durchquerung vorbestellen : linke und rechte Wurzeln<p> Durchquerung in der Reihenfolge: linke und rechte Wurzeln<strong> Durchquerung nach der Reihenfolge: linke und rechte Wurzeln</strong> Hinweis: Vorne, in der Mitte und hinten beziehen sich auf die Position der Wurzel</p> 3.<p>TreeSet-Sammlung und TreeMap Die Sammlung verwendet die In-Order-Traversal-Methode, d. h. die linke Wurzel und die rechte. Es handelt sich um selbstausgleichende Binärbäume </p> <p>Wir können die Methode der anonymen inneren Klasse verwenden<strong> Wir können die Methode der anonymen inneren Klasse verwenden (diese Klasse hat keinen Namen, direkt eine neue Schnittstelle)</strong></p> <pre class="brush:php;toolbar:false">public class TreeSetTest06 { public static void main(String[] args) { //创建TreeSet集合的时候,需要使用比较器 //TreeSet<wugui> wuGuis=new TreeSet(); //这样不行,没有通过构造方法传递一个比较器进去 TreeSet<wugui> wuGuis=new TreeSet(new WuguiComparator()); wuGuis.add(new Wugui(1000)); wuGuis.add(new Wugui(800)); wuGuis.add(new Wugui(900)); wuGuis.add(new Wugui(300)); wuGuis.add(new Wugui(60)); for(Wugui wugui:wuGuis){ System.out.println(wugui); } }}class Wugui{ int age; public Wugui(int age) { super(); this.age = age; } @Override public String toString() { return "Wugui [age=" + age + "]"; }}//单独再这里编写一个比较器//比较器实现java.util.Comparator接口(Comparable是java.lang包下的)class WuguiComparator implements Comparator<wugui>{ public int compare(Wugui o1,Wugui o2){ //指定比较规则 //按照年龄排序 return o1.age-o2.age; }}</wugui></wugui></wugui>
Die endgültige Schlussfolgerung ist, dass die Elemente im Schlüsselteil von TreeSet oder TreeMap platziert sind Die Sammlung muss sortiert werden, einschließlich zweier Methoden: Die erste: Die in der Sammlung platzierten Elemente implementieren die java.lang.Comparable-Schnittstelle. Die zweite: Übergeben Sie beim Erstellen der TreeSet- oder TreeMap-Sammlung ein Vergleichsobjekt daran. Wie wähle ich zwischen Comparable und Comparator?
Wenn sich die Vergleichsregeln nicht ändern oder wenn nur eine Vergleichsregel vorhanden ist, wird empfohlen, die Comparable-Schnittstelle zu implementieren.
Wenn mehrere Vergleichsregeln vorhanden sind und häufig zwischen mehreren Vergleichsregeln gewechselt werden muss, wird dies empfohlen Komparatorschnittstelle verwenden
Das Design der Komparatorschnittstelle entspricht den OCP-Prinzipien.
Collections-Werkzeugklasse
java.util.Collections-Sammlungswerkzeugklasse, die den Betrieb von Sammlungen erleichtertTreeSet<wugui> wuGuis=new TreeSet(new Comparator<wugui>(){public int compare(Wugui o1,Wugui o2){ //指定比较规则 //按照年龄排序 return o1.age-o2.age; }});</wugui></wugui>
Verwandte Lernempfehlungen:
Java-Grundlagen
Das obige ist der detaillierte Inhalt vonSortieren von Java Basics TreeSet und Java Custom Types. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!