Java HashSet集合存儲遍歷學(xué)生對象代碼實例

由于Set集合是不存儲重復(fù)元素的,所以在做此案例時,如果我正常添加一個重復(fù)元素是什么結(jié)果呢?
public class HashSetDemo {
public static void main(String[] args) {
//創(chuàng)建HashSet集合對象
HashSet<Student> hashSet = new HashSet<Student>();
//創(chuàng)建學(xué)生對象
Student s1 = new Student("愛學(xué)習(xí)", 21);
Student s2 = new Student("愛Java", 22);
Student s3 = new Student("堅持不懈", 23);
Student s4 = new Student("愛Java", 22);
//把學(xué)生添加到集合
hashSet.add(s1);
hashSet.add(s2);
hashSet.add(s3);
hashSet.add(s4);
//遍歷集合(增強for循環(huán))
for (Student s : hashSet) {
System.out.println(s.getName() + "," + s.getAge());
}
}
}
運行結(jié)果:

通過運行結(jié)果,我們發(fā)現(xiàn),重復(fù)的元素仍然被添加進去,是什么原因呢? 根據(jù)源碼分析和HashSet底層數(shù)據(jù)結(jié)構(gòu)可以知道,如果兩個對象的哈希值相同(hashCode方法),并且對象的內(nèi)容也相同(equals方法),是不會存儲在哈希表的。所以我們需要在被存儲的對象類中重寫hashCode方法和equals方法,來解決添加了重復(fù)元素的問題。
在對象類中重寫hashCode方法和equals方法后(自動生成即可)運行上面的代碼,運行結(jié)果:

可見,重復(fù)的元素未被添加到集合。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Java簡單實現(xiàn)一個代碼行數(shù)統(tǒng)計器方法實例
這篇文章主要給大家介紹了關(guān)于如何利用Java簡單實現(xiàn)一個代碼行數(shù)統(tǒng)計器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Java.lang.OutOfMemoryError: GC overhead limit
本文主要介紹了Java.lang.OutOfMemoryError: GC overhead limit exceeded錯誤的解決,錯誤是由于堆空間不足導(dǎo)致GC頻繁運行,從而引起的,下面就來介紹一下解決方法2025-03-03
idea一招搞定同步所有配置(導(dǎo)入或?qū)С鏊信渲?
使用intellij idea很長一段時間,軟件相關(guān)的配置也都按照自己習(xí)慣的設(shè)置好,如果需要重裝軟件,還得需要重新設(shè)置,本文就詳細(xì)的介紹了idea 同步所有配置,感興趣的可以了解一下2021-07-07
java8 LocalDate LocalDateTime等時間類用法實例分析
這篇文章主要介紹了java8 LocalDate LocalDateTime等時間類用法,結(jié)合具體實例形式分析了LocalDate、LocalTime、LocalDateTime等日期時間相關(guān)類的功能與具體使用技巧,需要的朋友可以參考下2017-04-04
Spring配置多數(shù)據(jù)源導(dǎo)致事物無法回滾問題
這篇文章主要介紹了Spring配置多數(shù)據(jù)源導(dǎo)致事物無法回滾問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

