セット練習

2527 ワード

Collectionには2つのサブインタフェースがあります:1.List(リスト):秩序化、繰返し可能
2.set(セット):無秩序、繰り返し不可hashSet:下位データ構造はハッシュテーブルである.スレッドが同期していない.要素のhashCode値が同じか否かを判断することで要素の一意性を保証する.同じであれば、要素のequalsメソッドを判断し続ける
TreeSet:下位データ構造は二叉木であり、comparareToメソッドによって要素が一意であることを保証し、2つのソート方式:1要素自身に比較性を持たせ、Comparableインタフェースを実現することによってcomparareToメソッドを上書きする.自然順序、デフォルト順序ともいう②要素自体が比較性を備えていない場合、または備えている比較性が適用されない場合、集合自体を初期化する必要がある場合に比較性を備える
Tips:並べ替えの場合、主な条件が同じであれば、必ず副次的な条件を判断する
練習:TreeSetコレクションにカスタムオブジェクトの学生を格納し、年齢順にソートします.
import java.util.*
public  class TreeSetDemo {
public static void main(String[] args) {
    TreeSet ts = new TreeSet();
    ts.add(new Student("xuesheng01",23));
    ts.add(new Student("xuesheng04",13));
    ts.add(new Student("xuesheng03",13));
    ts.add(new Student("xuesheng02",9));
    
    Iterator it = ts.iterator();//       
    while (it.hasNext())
    {
        Student stu =(Student)it.next();//    next        object,       
        System.out.println(stu.getName()+"---"+stu.getAge());
    };
}
public class Student implements Comparable//           ,          
{
private String name;
private int age;
public Student (String name, int age)
    {
    this.name = name;
    this.age = age;
    }
public int compareTo(Object obj)
    {
    if(!(obj instanceof Student))//           
        throw new RuntimeException("      ");//        
    Student s = (Student)obj;
    if(this.age>s.age)//        ,    
        return 1;//    。         
    if(this.age==s.age)
    {
        return this.name.compareTo(s.name);//       ,       
    }
    return -1;}//      ,                
public String getName()
    {
        return name;
    }
public int getAge()
    {
        return age;
    }   
}}

実行結果:
xuesheng02---9
xuesheng03---13
xuesheng04---13
xuesheng01---23

期間中にエラーが発生しました:
  Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
   No enclosing instance of type TreeSetDemo is accessible. Must qualify the allocation with an enclosing       
   instance of type TreeSetDemo (e.g. x.new A() where x is an instance of TreeSetDemo).
    at myobject.TreeSetDemo.main(TreeSetDemo.java:13)
  • 問題の原因:内部クラスStudioは動的、すなわちpublic classの先頭である.メインプログラムはpublic static class mainです.Javaでは、クラス内の静的メソッドは動的メソッドを直接呼び出すことはできません.内部クラスを静的クラスに修飾してから、クラスのメンバー変数とメンバーメソッドを静的クラスで呼び出すことができます.
  • 解決策:他の変動をしない場合、最も簡単な解決策はpublic classをpublic static classに変更することである.