更新時間:2021-05-21 16:49:43 來源:動力節點 瀏覽920次
Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,它是比Collection接口更加嚴格了。與List接口不同的是,Set接口元素無序,并且都會以某種規則保證存入的元素不出現重復。
Set接口主要有兩個實現類,分別是HashSet和TreeSet。其中,HashSet根據對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。TreeSet則是以二叉樹的方式來存儲元素,它可以實現對集合中的元素進行排序
HashSet是Set接口的一個實現類,它所存儲的元素是不可重復的,并且元素都是無序的。當向HashSet集合中添加一個對象時,首先會調用該對象的hashCode()方法來計算對象的哈希值,從而確定元素的存儲位置。如果此哈希值相同,再調用對象的equals()方法來確保該位置沒有重復元素。Set集合與List集合存取元素的方式都一樣。
通過一個案例來演示HashSet集合的用法:
public class Example01 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("老大");
set.add("老二");
set.add("老三");
set.add("老二");
Iterator it = set.iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
}
}
當向集合中存入元素時,為了保證HashSet正常工作,要求在存入對象時,重寫Object類中的hashCode和equals()方法。
上述案例將字符串存入HashSet時,String類已經重寫了hashCode()和equals()方法。但是如果將Student對象存入HashSet,結果又會怎樣呢?
class Student{
String id;
String name;
public Student(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return id+":"+name;
}
@Override
public int hashCode() {
return id.hashCode(); //返回id屬性的哈希值
}
@Override
public boolean equals(Object obj) {
if(this == obj) { //判斷是否是同一個對象
return true; //如果是,直接返回true
}
if(!(obj instanceof Student)) { //判斷對象是為Student類型
return false; //如果對象不是Student類型返回false
}
Student stu = (Student) obj; //將對象強轉為Student類型
boolean b = this.id.equals(stu.id); //判斷id值是否相同
return b; //返回判斷結果
}
}
public class Example02 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add(new Student("1", "老王"));
set.add(new Student("2", "老三"));
set.add(new Student("2", "老三"));
System.out.println(set);
}
}
Student類重寫了Object類的hashCode()和equals()方法。在hashCoded()方法中返回id屬性的哈希值,在equals()方法中比較對象的id屬性是否相等,并返回結果。當調用HashSet集合的add()方法添加stu3對象時,發現它的哈希值與stu2對象相同,而且stu2.equals(stu3)返回true。HashSet集合認為兩個對象相同,因此重復的Student對象對成功去除了。
以上就是動力節點小編介紹的"Javaset集合的簡單匯總",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習