HashSet結(jié)構(gòu)圖
HashSet.png
HashSet主要方法
- public boolean add(E e)
- public boolean remove(Object o)
HashSet方法解讀
public boolean add(E e)源碼:
//hashset 利用的是hashmap,所以每次放入的value都是PRESENT
private static final Object PRESENT = new Object();
public boolean add(E e) {
//可以看到畸裳,hashset利用的是hashmap的key,把它對(duì)應(yīng)的值放入到key里帅容,value放入的都是固定的值
return map.put(e, PRESENT)==null;
}
public boolean remove(Object o)源碼:
public boolean remove(Object o) {
//hashmap的刪除最終會(huì)返回刪除對(duì)象的value值伍伤,hashset通過(guò)判斷這個(gè)value值是不是等于PRESENT來(lái)判斷是否刪除成功
return map.remove(o)==PRESENT;
}
HashSet遍歷方式
// one
for (Object o : set) {
System.out.println(o);
}
// two
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
HashSet其他特性介紹
- hashset是由hashmap構(gòu)成的扰魂,主要利用的就是hashmap的key來(lái)保存相應(yīng)的值
- hashset的值是不可以重復(fù)的蕴茴,主要性質(zhì)是由hashmap決定的姐直,hashmap重復(fù)的key算一個(gè)key,hashset是可以放入為空的元素的撞叽。
- hashset也不是線程安全的插龄,多線程環(huán)境下操作也是有問(wèn)題的。