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()方法要保證屬性相同的物件返回值相同, 屬性不同的物件盡量不同
treeset原理:
/** treeset儲存物件的時候, 可以排序, 但是需要指定排序的演算法
* * integer能排序(有預設順序), string能排序(有預設順序), 自定義的類儲存的時候出現異常(沒有順序)
* * 如果想把自定義類的物件存入treeset進行排序, 那麼必須實現comparable介面
* 在類上implement comparable
* 重寫compareto()方法
* 在方法內定義比較演算法, 根據大小關係, 返回正數負數或零
* 在使用treeset儲存物件的時候, add()方法內部就會自動呼叫compareto()方法進行比較, 根據比較結果使用二叉樹形式進行儲存
*/
集合框架之 set集合
物件重複是指物件裡面的變數的值都相等,並不定是位址。list集合儲存的型別是基礎型別還比較好辦,直接把list集合轉換成set集合就會自動去除。當set集合儲存的是物件型別時,需要在物件的實體類裡面重寫public boolean equals object obj 和 public int has...
API集合框架 Set集合之HashSet
set集合中不允許有相同的元素,並且取出集合中的元素的方式只有一種 迭代器 雜湊表 用於儲存元素與雜湊值對應的關係的容器 一.雜湊表特點 二.雜湊演算法原理 hashcode方法 hash element 因此從這裡可以看出來當我們從雜湊表中取出元素的時候,會發現與我們儲存元素的順序不一樣 三.雜湊...
Java集合框架 三 之集合輸出
在之前進行集合輸出的時候都利用了tostring 或者利用了list介面中的get 方法。這些都不是集合的標準輸出。如果從標準上來講,集合輸出一共有四種手段 iterator listiterator enumeration foreach,接下來就詳細講述一下這幾種方法 在jdk1.5之前,在co...