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í)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. vue實現(xiàn)web在線聊天功能2. JavaEE SpringMyBatis是什么? 它和Hibernate的區(qū)別及如何配置MyBatis3. JavaScript實現(xiàn)頁面動態(tài)驗證碼的實現(xiàn)示例4. Springboot 全局日期格式化處理的實現(xiàn)5. Java使用Tesseract-Ocr識別數(shù)字6. 完美解決vue 中多個echarts圖表自適應(yīng)的問題7. Python使用urlretrieve實現(xiàn)直接遠程下載圖片的示例代碼8. SpringBoot+TestNG單元測試的實現(xiàn)9. 在Chrome DevTools中調(diào)試JavaScript的實現(xiàn)10. 解決Android Studio 格式化 Format代碼快捷鍵問題
