標籤:
Set集合
1.HashSet
只去重複, 沒有順序
HashSet的add方法會調用hashCode和equals, 所以儲存在HashSet中的對象需要重寫這兩個方法.
2.TreeSet
去重複, 並且可以按照某種順序排序
TreeSet的add方法會將對象轉為Comparable, 然後調用compareTo方法, 所以儲存在TreeSet中的對象必須實現Comparable, 重寫compareTo方法
3.LinkedHashSet
HashSet的子類, 去重複, 並且保留儲存順序
4.迭代方式
使用迭代器Iterator
使用增強for迴圈
HashSet原理:
/*
* 如果我們希望一個集合有去重複的功能, 可以在它的add方法中檢查要添加的對象在集合中是否存在.
* 迭代集合中每個元素, 和要添加的比較, 如果相同, 就不存.
*
* 如果使用上述方法, 當集合元素特別多的時候, 效率會很低.
*例如: 集合中有1萬個元素, 當儲存下一個的時候, 需要和前面1萬個都比較, 效率較低.
*
* HashSet的工作原理:
* 每次儲存物件的時候, 調用對象的hashCode()方法, 計算一個雜湊值. 在集合中尋找是否包含雜湊值相同的元素.
* 如果沒有雜湊值相同元素, 直接存入.
* 如果有雜湊值相同的元素, 逐個使用equals()方法比較.
* 比較結果全為false就存入.
* 如果比較結果有true則不存.
*
* 如何將自訂類對象存入HashSet進行去重複
* 類中必須重寫hashCode()方法和equals()方法
* equals()方法中比較所有屬性
* hashCode()方法要保證屬性相同的對象傳回值相同, 屬性不同的對象盡量不同
網上找到詳細介紹: http://zhangshixi.iteye.com/blog/673143
TreeSet原理:
/*
* TreeSet儲存物件的時候, 可以排序, 但是需要指定排序的演算法
*
* Integer能排序(有預設順序), String能排序(有預設順序), 自訂的類儲存的時候出現異常(沒有順序)
*
* 如果想把自訂類的對象存入TreeSet進行排序, 那麼必須實現Comparable介面
* 在類上implement Comparable
* 重寫compareTo()方法
* 在方法內定義比較演算法, 根據大小關係, 返回正數負數或零
* 在使用TreeSet儲存物件的時候, add()方法內部就會自動調用compareTo()方法進行比較, 根據比較結果使用二叉樹形式進行儲存
java集合 :set 學習