更新時(shí)間:2020-04-30 14:25:31 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2858次
概述
Collection接口是存放元素的集合,由Collection接口派生的兩個(gè)接口,list負(fù)責(zé)放重復(fù)的元素,而set則負(fù)責(zé)存放不重復(fù)的元素。
那么在存放的時(shí)候,set集合怎么判斷元素是否都是重復(fù)的呢?
在Java中,用到了equals方法。
自反性:對(duì)于任何非空引用值x,x.equals(x)都應(yīng)返回true。
對(duì)稱(chēng)性:對(duì)于任何非空引用值x和y,當(dāng)且僅當(dāng)y.equals(x)返回true時(shí),x.equals(y)才應(yīng)返回true。
傳遞性:對(duì)于任何非空引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals
Set集合又是怎么取出元素?
我們都知道,在Java中只要是讀取多個(gè)數(shù)據(jù),都需要用到迭代器,增強(qiáng)for(也就是循環(huán))
例如:
迭代遍歷
Set
Iterator
while(it.hasNext()){
Stringstr=it.next();
System.out.println(str);
}
for循環(huán)遍歷
for(Stringstr:set)
{
System.out.println(str);
}
Set中的HashSet
HashSet(哈希表)
此類(lèi)實(shí)現(xiàn)了Set接口,由哈希表(實(shí)際是HashMap實(shí)例)支持。它不保證set的迭代順序,特別是它不保證該順序恒久不變。此類(lèi)允許使用null元素。
特點(diǎn):無(wú)序集合,存儲(chǔ)和取出的順序不同,沒(méi)有索引,不存儲(chǔ)重復(fù)元素。代碼的編寫(xiě)和ArrayList完全一致。
HashSet特點(diǎn):
•底層數(shù)據(jù)結(jié)構(gòu):哈希表(鏈表和數(shù)組的結(jié)合體);
•存儲(chǔ)取出都比較快;
•線(xiàn)程不安全,運(yùn)行速度快;
對(duì)象的哈希值
•如果沒(méi)有重寫(xiě)父類(lèi),每次運(yùn)行的結(jié)果都是不同的整數(shù);
•如果子類(lèi)重寫(xiě)父類(lèi)的方法,哈希值,自定義;
•存儲(chǔ)到HashSet的依據(jù);
字符串的哈希值
String類(lèi)繼承Object,重寫(xiě)了父類(lèi)的方法hashCode
哈希表的存儲(chǔ)過(guò)程
publicstaticvoidmain(String[]args)
{
HashSet
set.add(newString("abc"));
set.add(newString("abc"));
set.add(newString("abc"));
set.add(newString("bbc"));
set.add(newString("bbc"));
System.out.println(set);
}
而LinkedHashSet集合,他是基于鏈表的哈希表實(shí)現(xiàn),繼承自HashSet滴
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):Collection中set集合方法”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743