本篇文章為大家展示了如何在Java中使用Set集合,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括凌源網(wǎng)站建設(shè)、凌源網(wǎng)站制作、凌源網(wǎng)頁制作以及凌源網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,凌源網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到凌源省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Set接口簡介
Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進(jìn)行功能上的擴(kuò)充,它是比Collection接口更加嚴(yán)格了。與List接口不同的是,Set接口元素?zé)o序,并且都會(huì)以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。
Set接口主要有兩個(gè)實(shí)現(xiàn)類,分別是HashSet和TreeSet。其中,HashSet根據(jù)對象的哈希值來確定元素在集合中的存儲(chǔ)位置,因此具有良好的存取和查找性能。TreeSet則是以二叉樹的方式來存儲(chǔ)元素,它可以實(shí)現(xiàn)對集合中的元素進(jìn)行排序
HashSet集合
HashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲(chǔ)的元素是不可重復(fù)的,并且元素都是無序的。當(dāng)向HashSet集合中添加一個(gè)對象時(shí),首先會(huì)調(diào)用該對象的hashCode()方法來計(jì)算對象的哈希值,從而確定元素的存儲(chǔ)位置。如果此哈希值相同,再調(diào)用對象的equals()方法來確保該位置沒有重復(fù)元素。Set集合與List集合存取元素的方式都一樣。
通過一個(gè)案例來演示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); } } }
結(jié) 論:
當(dāng)向集合中存入元素時(shí),為了保證HashSet正常工作,要求在存入對象時(shí),重寫Object類中的hashCode和equals()方法。
上述案例將字符串存入HashSet時(shí),String類已經(jīng)重寫了hashCode()和equals()方法。但是如果將Student對象存入HashSet,結(jié)果又會(huì)怎樣呢?
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) { //判斷是否是同一個(gè)對象 return true; //如果是,直接返回true } if(!(obj instanceof Student)) { //判斷對象是為Student類型 return false; //如果對象不是Student類型返回false } Student stu = (Student) obj; //將對象強(qiáng)轉(zhuǎn)為Student類型 boolean b = this.id.equals(stu.id); //判斷id值是否相同 return b; //返回判斷結(jié)果 } } 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屬性是否相等,并返回結(jié)果。當(dāng)調(diào)用HashSet集合的add()方法添加stu3對象時(shí),發(fā)現(xiàn)它的哈希值與stu2對象相同,而且stu2.equals(stu3)返回true。HashSet集合認(rèn)為兩個(gè)對象相同,因此重復(fù)的Student對象對成功去除了。
上述內(nèi)容就是如何在Java中使用Set集合,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。