集合之HashSet TreeSet原理

2021-07-31 15:41:52 字數 1420 閱讀 5778

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...