java集合框架 HashSet

2021-08-27 20:12:37 字數 2200 閱讀 2426

目錄

1.無序&&唯一

2.真的唯一麼?

3.先入為主

4.set的其他實現類

hashset實現了set介面,內部主要是通過hashmap實現的.

1.無序&&唯一

public class hashsetdemo1 ;

collections.addall(set, str);

system.out.println(set);

}}

執行結果:[set, itaretor, collection, list, map]

可以看到,set的列印順序與陣列str不同,且重複"set"只能儲存一次,那麼hashset是如何判斷兩個物件是否是同乙個物件的呢?

2.真的唯一麼?

在hashmap內部對於是否是同乙個物件是這樣判斷的:

(p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k))));
與三個條件有關:1st.判斷hash;2nd.判斷==;3rd.呼叫equals(),即如果(1st && (2nd || 3rd))滿足true,則視為物件.可見hashset內元素的唯一並非真正意義上的唯一,而是取決於如何定義hashcode()和equals()方法.下面依次進行驗證.

1)判斷hashcode()

public class hashsetdemo2 

}class person

@override

public int hashcode()

}

執行結果:

hashcode被執行:366712642

hashcode被執行:1829164700

2由結果可知hashcode()方法被執行,由於hash值不同,p2可以新增到set中.注意:不要在新增元素之後嘗試修改hashset當中參與生成hash值的屬性,否則hash值的改變會導致很多問題.

2)判斷"=="

當hashcode相等時,會通過==判斷兩個物件是否是同乙個物件,如果是同乙個將不會再進行equals判斷(短路||).

public class hashsetdemo2 

}class person

@override

public int hashcode()

@override

public boolean equals(object o)

}

執行結果:

hashcode被執行

hashcode被執行

1注意,此段**中的equals()未被呼叫.

3)呼叫equals判斷

當兩個物件hashcode相等但又不是同乙個物件,將呼叫equals方法再次進行判斷:如果true則視為同乙個物件,否則視為兩個物件(hash值衝突).

public class hashsetdemo2 

}class person

@override

public int hashcode()

@override

public boolean equals(object o)

}

執行結果:

hashcode被執行

hashcode被執行

equals被執行

2如果上面equals返回true,則列印出的set.size()為1.

3.先入為主

hashset在新增元素時,如果認定了重複元素,hashset將遵循先入為主的原則,直接捨棄新元素.例:

public class hashsetdemo3 

}class person

@override

public int hashcode()

@override

public boolean equals(object o)

@override

public string tostring()

}

執行結果:[小明]

4.set的其他實現類

1)treeset

內部通過二叉樹結構儲存資料,排序儲存,可在構造時自定義comparator按指定規則儲存.

API集合框架 Set集合之HashSet

set集合中不允許有相同的元素,並且取出集合中的元素的方式只有一種 迭代器 雜湊表 用於儲存元素與雜湊值對應的關係的容器 一.雜湊表特點 二.雜湊演算法原理 hashcode方法 hash element 因此從這裡可以看出來當我們從雜湊表中取出元素的時候,會發現與我們儲存元素的順序不一樣 三.雜湊...

集合框架Set介面之hashset

1 set介面 public inte ce set extends collection 乙個不包含重複元素的collection。更確切的說,set不包含滿足 e1.equal e2 的元素對e1和e2,並且最多包含乙個null元素.set介面不包含重複的元素,並且做多只能有乙個null值,而l...

java集合框架

集合框架包括集合與對映 collection and map 以及它們的子類 容器類 1 list 元素有先後次序的集合,元素有index位置,元素可以重複,繼承自collection介面,實現類 arraylist,vector,linkedlist 2 set 元素無續,不能重複新增,是數學意義...