Set及其三個子類

2021-09-25 10:42:07 字數 2780 閱讀 8291

(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 底層資料結構是鍊錶,查...