set介面
set集合就像是乙個罐子,一旦把物件「丟進去」,多個物件之間就沒有順序,
set元素不可以重複
。set判斷兩個物件是否相同不是使用== 而是使用equals
set t = new hashset();
t.add("aa");
t.add(new string("aa"));
system.out.println(t.add(new string("aa")));
//false
//set 對比兩個物件是否相同使用 equals
system.out.println(t.tostring());
//[aa]
set集合 的實現類:hashset treeset enumset
hashset 和 treeset 建議不儲存可變物件,因為會導致處理很複雜。
hashset類:
底層使用資料結構的
hash演算法
實現的,因此具有很好的訪問,查詢的效能。
hashset按照hash演算法來儲存集合的
hashset具有以下特點:
1、不能保證元素的排列順序,順序可能發生變化。
2、hashset(非同步) 不是同步的,如果多執行緒訪問乙個set集合,如果多執行緒訪問乙個hashset集合,如果有2條或者2條以上的執行緒同事修改了hashset集合時,必須通過**來保證同步。
3、集合元素的值可以是null
當向hashset集合中存入乙個元素時,會呼叫該物件的hashcode()方法得到該物件的hashcode值,然後根據該hashcode值來決定該物件在hashcode中儲存位置。如果兩個元素通過equals方法比較返回true,他們的hashcode()方法返回值不相同,hashcode將會把他們儲存在不同位置,也就可以新增成功。
簡單的來說,hashset集合判斷兩個元素相等的標準是兩個物件通過equals方法比較相等,並且兩個物件的hashcode()方法返回值也相同。
set t = new hashset();
student s = new student("1",1);
student s1 = new student("1",1);
t.add(s);
t.add(s1);
system.out.println(s.hashcode() == s1.hashcode());
//false
system.out.println(t.tostring());
//[student [name=1, age=1], student [name=1, age=1]]
string s = new string("a");
string s1 = new string("a");
t.add(s);
t.add(s1);
system.out.println(s.hashcode() == s1.hashcode());
//true
system.out.println(t.tostring());
//[a]
hashset訪問物件是hashcode來訪問的,hashcode()值相當於hashset的「索引」
hashset子類linkedhashset
treeset類
treeset 是乙個有序的集合,它的作用是提供有序的set集合。
treeset並不是根據插入順序排序的,而是根據元素的實際值來排序的。
treeset是採用紅黑樹的資料結構對元素排序的。
treeset排序方法:自然排序(預設)、定製排序
自然排序:treeset會呼叫compareto()方法來比較元素之間的大小關係,將集合元素進行公升序排序,這種方式被稱之為自然排序。
Set介面下的集合
hashset集合是無序 不可重複的,它的底層是使用了hashmap實現的,hashmap的底層是陣列和鍊錶實現的 無序指的是增加元素的順序和取出元素的順序不一定一致,不可重複是因為它使用了通過首先獲取hashcode值,再通過hash演算法將hashcode值算出索引,最後比較equals方法來決...
Collection集合類(Set介面)
set介面 extend collection介面 特點 1 不允許重複的元素 2 設有索引,沒有帶索引的方法,也不能進行普通for 3 是乙個元素的集合,訪問可能不一致 4 底層是雜湊表 查詢快 方法上和collection一致 實現類 hashset 由雜湊表構成 例 setset new ha...
集合4 集合 Collection介面 Set介面
儲存無序的 不可重複的資料 三種實現類 注 1.set介面中沒有額外定義新的方法,使用的都是collection中宣告過的方法 2.向set中新增的資料,其所在類一定要重寫hashcode 和equals 且重寫的hashcode 和equals 盡可能保持一致 相等的物件具有相等的雜湊碼 以has...