Java--hashSetとTreeSetの違い

1968 ワード

Java–hashSetとTreeSetの違い
1. hashSet
下位層はハッシュテーブルを用いてサポートされ、アクセス速度が速いことが特徴である.
実装原理:Hasetに要素を追加する場合、HashSetはまず要素のhashCodeメソッドを呼び出して要素のハッシュ値を得、その後、要素のハッシュ値に基づいて一連の演算を経て、その要素のハッシュテーブルにおける記憶位置を算出することができる.
  • 要素が格納されている場所が現在何も格納されていない場合、要素はその場所に直接格納することができる.
  • この要素の記憶位置が現在他の要素が存在していると算出されると、その要素のequalsメソッドがその位置の要素ともう一度比較される.equalsの戻り値がtrueの場合、その要素とこの位置の要素は重複要素と見なされ、追加は許可されません.逆に、追加できます.

  • 2. TreeSet
    最下位は、要素がソートされて格納されることを特徴とする赤と黒のツリー(ツリー)データ構造を使用して実現されます.
  • TreeSetに要素を追加する場合、要素自体が自然な順序の特性を備えている場合、要素は自動的にソートされます.
  • TreeSetに要素を追加する場合、要素自体が自然な順序の特性を備えていない場合、要素が属するクラスはComparableインタフェースを実現し、要素の比較規則をCompareToメソッドに定義する必要があります.
  • TreeSetに要素を追加する場合、要素自体が自然な順序の特性を備えておらず、要素が属するクラスがCOmparableインタフェースを実現していない場合は、TreeSetオブジェクトを作成するときにコンパレータに入力する必要があります.例:
  • //        
    class MyComparator implements Comparator<Person>{
    
    	@Override
    	public int compare(Person p1, Person p2) {
    		return p1.id-p2.id;
    	}
    }
    
  • 比較方法(CompareToまたはCompare)が0を返した場合、その要素は重複要素とみなされ、追加は許されない.