JAVA 集合(Set)
開發工具與關鍵技術:JAVA Set
作者:聽民謠的老貓
撰寫時間:2020/12/28 15:30
Set集合體繫結構:
*
Set特點:存入集合的順序和取出集合的順序不一致 ,沒有索引 ,存入集合的元素沒有重複。
HashSet集合
public class HashSetDemo {
public static void main(String[] args) {
//建立集合物件
//Set set = new HashSet();
HashSet<String> set = new HashSet<String>();
//新增元素
set.add("hello");
set.add("world");
}
}
隨堂筆記:
* 通過檢視原始碼發現:
* HashSet的add()方法,首先會使用當前集合中的每一個元素和新新增的元素進行hash值比較,
* 如果hash值不一樣,則直接新增新的元素
* 如果hash值一樣,比較地址值或者使用equals方法進行比較
* 比較結果一樣,則認為是重複不新增
* 所有的比較結果都不一樣則新增
HashSet和ArrayList 的add比較:
ArrayList:
public class HashSetDemo {
public static void main(String[] args) {
//建立集合物件
ArrayList al = new ArrayList();
//新增元素
al.add("hello");
al.add("world");
al.add("world");
}
}
遍歷集合:
HashSet:
public class HashSetDemo {
public static void main(String[] args) {
//建立集合物件
//Set set = new HashSet();
HashSet<String> set = new HashSet<String>();
//新增元素
set.add("hello");
set.add("world");
set.add("world");
}
}
遍歷集合:
ArrayList新增能重複是因為ArrayList採用連結串列結構,它的新增只需要修改下個元素的地址即可。
HashSet 新增一樣,比較hash值,地址值或者使用equals方法進行比較比較結果一樣,則認為是重複不新增,所有的比較結果都不一樣則新增
HashSet唯一性原理
規則:新新增到HashSet集合的元素都會與集合中已有的元素一一比較
首先比較雜湊值(每個元素都會呼叫hashCode()產生一個雜湊值)
如果新新增的元素與集合中已有的元素的雜湊值都不同,新新增的元素存入集合
如果新新增的元素與集合中已有的某個元素雜湊值相同,此時還需要呼叫equals(Object obj)比較
如果equals(Object obj)方法返回true,說明新新增的元素與集合中已有的某個元素的屬性值相同,那麼新新增的元素不存入集合
如果equals(Object obj)方法返回false, 說明新新增的元素與集合中已有的元素的屬性值都不同, 那麼新新增的元素存入集合