Heim > Java > JavaBase > Hauptteil

Sortieren von Java Basics TreeSet und Java Custom Types

coldplay.xixi
Freigeben: 2021-03-05 09:54:00
nach vorne
3048 Leute haben es durchsucht

Sortieren von Java Basics TreeSet und Java Custom Types

TreeSet und benutzerdefinierte Java-Typsortierung

  • Zeigt, dass TreeSet String sortieren kann.
  • TreeSet kann keine benutzerdefinierten Typen sortieren. So schreiben Sie Vergleichsregeln. Selbstausgleichende Binärbaumstruktur. Implementierungs-Komparatorschnittstelle
  • Collections-Tool-Klasse
  • (kostenlose Lernempfehlung:
  • Java Basic Tutorial

) 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ärbaum

3. 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>
Nach dem Login kopieren


TreeSet kann benutzerdefinierte Typen nicht sortieren

Kann TreeSet benutzerdefinierte Typen sortieren? Sortieren von Java Basics TreeSet und Java Custom Types

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>
Nach dem Login kopieren
Exception in thread "main" java.lang.ClassCastException: testCollection.Person cannot be cast to java.lang.Comparable
Nach dem Login kopieren
Der Grund für diesen Fehler ist, dass die

Person-Klasse die java.lang, Comparable-Schnittstelle nicht implementiert

//Die in der TreeSet-Sammlung platzierten Elemente müssen die java.lang.Comparable-Schnittstelle implementieren

//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>
Nach dem Login kopieren
//Sie müssen die Vergleichslogik in dieser Methode oder die Vergleichsregeln schreiben und angeben, wonach verglichen werden soll.

//k.compareTo(t.key)

//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>
Nach dem Login kopieren

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 erleichtert

Sortieren von Java Basics TreeSet und Java Custom Types

TreeSet<wugui> wuGuis=new TreeSet(new Comparator<wugui>(){public int compare(Wugui o1,Wugui o2){
        //指定比较规则
        //按照年龄排序
        return o1.age-o2.age;
        }});</wugui></wugui>
Nach dem Login kopieren


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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!