TreeSetにおけるデータ秩序の理解について

1172 ワード

  • java言語のTreeSetでは、その中に格納されているデータが自動的にソートされます.この概念は、データ構造の二叉ソートツリーと同様に、二叉ソートツリーを介してデータを格納し、中系列で遍歴して取り出すデータは、小さいものから大きいものまで
  • です.
  • TreeSetに格納データの順序が
  • である場合.
  • “C”,“A”,"B",“E”,“F”,“D”
  • では、集合を巡回してデータを取り出すと、データの順序がA B C D Eになることがわかります.では、これはどのように実現されますか.
  • は、基本的なデータ型についてである.IntegerやStringのように、データを追加すると、TreeSethはこのクラスのcompareToメソッドに従ってソートされます.この場合、追加の作業は必要ありません.データを保存するだけでいいです.
  • しかし、実際のアプリケーションではそう簡単ではありません.compareToメソッドを実装していないクラス、例えば自分で定義したクラスが格納されている場合、集合はどのようにソートされますか?
  • ここでは一般的に、格納されたデータがTreeSet=new TreeSet()である場合、2つの方法がある. 
  • メソッドStudentクラスのメンバー変数には学号、年齢、名前があります.学生クラスのimplements Comparatorインタフェースのメソッドcomparareまたはimplements Comparableインタフェースを書き換え、希望するソートルール
  • を指定する必要があります.
  • メソッド2
    TreeSet ts=new TreeSet(new Comparator() {
    
    			@Override
    			public int compare(student o1, student o2) {
    				int num=o1.age-o2.age;
    				int num2=num==0?o1.number-o2.number:num;
    				return num2;
    			}
    		});
    TreeSetをインスタンス化する際、コンストラクタにおいて匿名の内部クラスによってその中のcompareメソッドを書き換え、その中で具体的なソートメソッドを指定し、メソッド2で指定する順序は先に年齢順にソートし、年齢が同じ場合に学号に従ってソート
  • を行う.