(1)概述:
元素無序(訪問順序不一致)且唯一
hashset 底層資料結構是雜湊表. hashset 不是執行緒安全的 集合元素可以是 null
雜湊表:是乙個元素為鍊錶的陣列,綜合了陣列和鍊錶的優點 (像新華字典一樣) (jdk1.7之前)
(2)原理:
當向 hashset 集合中存入乙個元素時,hashset 會呼叫該物件的 hashcode() 方法來得到該物件的 hashcode 值,然後根據 hashcode 值決定該物件在 hashset 中的儲存位置。
(3)hashset 集合判斷兩個元素相等的標準:
兩個物件通過 hashcode() 方法比較相等,並且兩個物件的 equals() 方法返回值也相等。
結論:hashset 保證元素唯一性是靠元素重寫hashcode()和equals()方法來保證的,如果不重寫則無法保證。
合理重寫hashcode 方法,是為了減少呼叫equals()的次數,也稱之為減少碰撞
@override
public boolean equals(object o)
@override
public int hashcode()
(4)展示:
public class demo1
system.out.println("------------------------");
hashsetstr = new hashset<>();
str.add("qwetrt");
str.add("qw");
str.add("啊啊啊");
str.add("啊啊啊");
str.add("我我我我");
str.add("qweetyuurrrr");
for (string s : str)
}}
結果:111
1213
我我我我
qweetyuurrrr
qwqwetrt
啊啊啊(1)概述:
linkedhashset 底層資料結構是鍊錶和雜湊表 元素有序且唯一 鍊錶保證了有序,雜湊表保證了唯一。
執行緒不安全效率高。
(2)舉例:
public class demo
}}
結果:
bbbaaa
cccddd
(1)概述:
treeset 元素唯一,且可以對元素進行排序,
底層資料結構是二叉樹
(2)舉例:
public class demo1
}
結果:
[17, 18, 19, 20, 22, 23, 24]
(3)自然排序:
如果採用的是空參構造,那麼採用的就是自然排序
如果是自然排序,那麼對元素有要求,要求元素必須實現乙個comparable介面,重寫這個介面中的乙個compareto這個比較的方法,根據此方法的返回值的正 負 0 來決定元素,排列的位置
public class demo1
}static class student implements comparable
public student(string name, int age)
public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
@override
public string tostring() ';
}//這是乙個比較的方法
@override
public int compareto(student student)
}}
結果:
student
student
student
student
student
student
student
student
student
student
(4)比較器排序
就是我們在建立treeset物件時,給他傳入乙個比較器,重寫比較器裡面的compare方法,根據此方法的返回值的正負 0來決定元素的放置順序
public class demo
}static class mycomparator implements comparator
}static class student
public student(string name, int age)
public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
@override
public string tostring() ';}}
}
結果:
student
student
student
student
student
student
student
student
student
student
list 的三個子類
arraylist 底層資料結構是陣列,查詢快,增刪慢。執行緒不安全,效率高。vector 底層資料結構是陣列,查詢快,增刪慢。執行緒安全,效率低。linkedlist 底層資料結構是鍊錶,查詢慢,增刪快。執行緒不安全,效率高。vector 類可以實現可增長的物件陣列 vector 是同步的。pub...
List三個子類的特點
listlist是乙個有序的集合,和set不同的是,list允許儲存項的值為空,也允許儲存相等值的儲存項 list是繼承於collection介面,除了collection通用的方法以外,擴充套件了部分只屬於list的方法 list比collection主要多了幾個add 方法和remove 方法的...
List三個子類的特點?
arraylist 底層資料結構是陣列,查詢快,增刪慢 執行緒不安全,效率高 vector 底層資料結構是陣列,查詢快,增刪慢 執行緒安全,效率低 vector相對arraylist查詢慢 執行緒安全 vector相對linkedlist增刪慢 陣列結構 linkedlist 底層資料結構是鍊錶,查...