JavaのTreeSetコレクションにカスタムタイプを格納
9105 ワード
TreeSetコレクションには、カスタムタイプが格納されます.
1、TreeSetストレージ要素が自動的に小さいものから大きいものに並べ替えられていることはよく知られていますが、ストレージはカスタムタイプですか?
小さいものから大きいものまで並べ替えられますか?テストしてみましょう.データを保存すると異常が放出されます.自動ソートは言うまでもありません.
//運転放出異常:java.lang.ClassCastException:class Person cannot be cast to class java.lang.Comparable.
//この異常は、PersonタイプはComparableタイプに変換できません.このComparableはableで終わり、明らかにインタフェースです.
2、だからシステムは私たちがComparableタイプに変換できることを要求して、つまりPersonクラスにComparableインタフェースを実現することを要求して、Personクラスの比較規則を定義します.
では、ComparableインタフェースのcompareToメソッドを書き換えるにはどうすればいいのでしょうか.
テストコード:
まとめ:
1、TreeSetのストレージは無秩序に繰り返してはいけない、nullを保存してはいけない.保存した要素は自動的に小さいから大きいまで並べ替えられる.
2、TreeSetセットに格納された要素は、Comparableインタフェースを実装し、比較のルールを手動で書き換える必要があります.
1、TreeSetストレージ要素が自動的に小さいものから大きいものに並べ替えられていることはよく知られていますが、ストレージはカスタムタイプですか?
小さいものから大きいものまで並べ替えられますか?テストしてみましょう.データを保存すると異常が放出されます.自動ソートは言うまでもありません.
//運転放出異常:java.lang.ClassCastException:class Person cannot be cast to class java.lang.Comparable.
//この異常は、PersonタイプはComparableタイプに変換できません.このComparableはableで終わり、明らかにインタフェースです.
2、だからシステムは私たちがComparableタイプに変換できることを要求して、つまりPersonクラスにComparableインタフェースを実現することを要求して、Personクラスの比較規則を定義します.
では、ComparableインタフェースのcompareToメソッドを書き換えるにはどうすればいいのでしょうか.
テストコード:
import java.util.*;
public class Test07 {
public static void main(String[] args) {
// TreeSet
Set<Person> people = new TreeSet<>();
// Person
/*people.add(new Person(30, "zhangsan"));
people.add(new Person(20, "lisi"));
people.add(new Person(10, "wangwu"));*/
// :java.lang.ClassCastException: class Person cannot be cast to class java.lang.Comparable
// :Person Comparable , Comparable able ,
// Comparable , Person Comparable , Person
// Comparable
people.add(new Person(30, "zhangsan"));
people.add(new Person(20, "lisi"));
people.add(new Person(10, "wangwu"));
System.out.println(people.size()); // 3
// people,
for (Person p : people) {
System.out.print(p + " ");
// : 10-wangwu 20-lisi 30-zhangsan
// : 20-lisi 10-wangwu 30-zhangsan
}
System.out.println();
}
}
class Person implements Comparable<Person> {
int age;
String name;
public Person() {
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
//
/*public int compareTo(Person p) {
return age - p.age; // : ,
//return p.age - age // : ,
//return 0; // 0
}*/
//
public int compareTo(Person p) {
return name.compareTo(p.name); // String ,
//return p.name.compareTo(name); //
//return 0; //
}
// toString()
public String toString() {
return age + "-" + name;
}
}
まとめ:
1、TreeSetのストレージは無秩序に繰り返してはいけない、nullを保存してはいけない.保存した要素は自動的に小さいから大きいまで並べ替えられる.
2、TreeSetセットに格納された要素は、Comparableインタフェースを実装し、比較のルールを手動で書き換える必要があります.