您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java集合方法怎么用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java集合方法怎么用”吧!
概述:
面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,為了方便多個(gè)對(duì)象的操作,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)。另一方面,使用Array存儲(chǔ)對(duì)象方面具有一些弊端,而Java集合就像一種容器,可以動(dòng)態(tài)地多個(gè)對(duì)象的引用放入容器中。
Java集合類可以用于存儲(chǔ)數(shù)量不等的對(duì)個(gè)對(duì)象,還可用于保存具有映射關(guān)系的關(guān)聯(lián)數(shù)組。
使用:
存儲(chǔ)對(duì)象可以考慮:①數(shù)組 ②集合
數(shù)組存儲(chǔ)對(duì)象的特點(diǎn):Student[] stu=new Student[20]; stu[0]=new Student(); ...
使用數(shù)組的弊端:一旦創(chuàng)建,其長(zhǎng)度不可變。
真實(shí)的數(shù)組存放的對(duì)象的個(gè)數(shù)是不可知的。
集合:
List:元素有序、可以重復(fù)的集合 - - - - " 動(dòng)態(tài)“ 數(shù)組
①ArrayList(主要的實(shí)現(xiàn)類)(底層是用數(shù)組實(shí)現(xiàn)的)
②LinkedList(對(duì)于頻繁的插入、刪除操作建議使用這個(gè))(底層用鏈表實(shí)現(xiàn)的)
③Vector(古老的實(shí)現(xiàn)類、線程安全的)
Set:存儲(chǔ)的元素是無(wú)序的,不可重復(fù)的!
無(wú)序性:無(wú)序性!=隨機(jī)性。真正的無(wú)序性,指的是元素在底層存儲(chǔ)的位置是無(wú)序的。
不可重復(fù)性:當(dāng)向Set中添加進(jìn)相同的元素的時(shí)候,后面的這個(gè)不能添加進(jìn)去。
說(shuō)明:要求添加進(jìn)Set中的元素所在的類,一定要重寫equals()和hashCode()方法。進(jìn)而保證Set中元素的不可重復(fù)性!
Set中的元素是如何存儲(chǔ)的呢?使用了哈希算法。
當(dāng)向Set中添加對(duì)象時(shí),首先調(diào)用此對(duì)象所在類的hashCode()方法,計(jì)算此對(duì)象的哈希值,此哈希值決定了此對(duì)象在Set中的存儲(chǔ)位置。若此位置之前沒(méi)有對(duì)象存儲(chǔ),則這個(gè)對(duì)象直接存儲(chǔ)到此位置。若此位置已有對(duì)象存儲(chǔ),再通過(guò)equals()方法比較這兩個(gè)對(duì)象是否相同,如果相同,后一個(gè)對(duì)象就不能再添加進(jìn)來(lái)。
萬(wàn)一返回false呢?都存儲(chǔ)(不建議如此)
>要求hashCode()方法要與equals()方法一致。
①HashSet(主要實(shí)現(xiàn)類)
②LinkedHashSet
使用鏈表維護(hù)了一個(gè)添加集合中的順序。導(dǎo)致當(dāng)我們遍歷LinkedHashSet集合元素時(shí),是按照添加進(jìn)去的順序遍歷的。
LinkedHashSet插入性能略低于 HashSet,但在迭代訪問(wèn) Set 里的全部元素時(shí)有很好的性能。
LinkedHashSet 不允許集合元素重復(fù)。
③TreeSet
向TreeSet中添加的元素,必須是同一個(gè)類的
TreeSet 不允許集合元素重復(fù)。
可以按照添加進(jìn)集合中的元素的指定的順序遍歷。像String,包裝類等默認(rèn)按照從小到大的順序遍歷。
當(dāng)Person類沒(méi)有實(shí)現(xiàn)Comparable接口時(shí),當(dāng)向TreeSet中添加Person對(duì)象時(shí),報(bào)ClassCaseException。
當(dāng)向TrreSet中添加自定義類的對(duì)象時(shí),有兩種排序方法:
①自然排序:要求自定義類實(shí)現(xiàn)java.lang.Comparable接口并重寫其compareTo(Object obj)的抽象方法,在此方法中,指明安裝自定義類的哪個(gè)屬性進(jìn)行排序。
②定制排序: comparetTo()與hashCode()以及equal s()三者保持一致! 排序方式 見以下步驟
①創(chuàng)建一個(gè)實(shí)現(xiàn)了Comparator接口的類對(duì)象
>①向TrreSet中添加Customer類的對(duì)象,在此compare()方法中,指明是按照Customer的那個(gè)屬性排序。
>②將此對(duì)象作為形參傳遞給TreeSet的構(gòu)造器中。
>③向TrreSet中添加Comparator接口中的compare方法中涉及的類的對(duì)象。
向TreeSet中添加元素時(shí),首先要按照compareTo()方法進(jìn)行比較,一旦返回0,雖然僅是2個(gè)對(duì)象的此屬性值相同,但是程序會(huì)認(rèn)為這兩個(gè)對(duì)象是相同的,進(jìn)而后一個(gè)對(duì)象就不能添加進(jìn)來(lái)
>comparetTo()與hashCode()以及equal s()三者保持一致!
Map接口:具有映射關(guān)系 " key-value對(duì) " 的集合 - - - - 類似于高中的“ 函數(shù) ”y=f(x) (x1,y1)(x2,y2);
①HashMap ②LinkedHashMap ③TreeMap ④Hashtable(子類:Properties)
size():返回集合中的元素(對(duì)象)的個(gè)數(shù);
add(Object obj):向集合中添加一個(gè)元素(對(duì)象),任何類型都可以。
addAll(Collection coll):將形參coll中包含的所有元素添加到當(dāng)前集合中。
isEmpty():判斷一下這個(gè)集合是否為空
clear():清空集合元素
contains(Objetc obj):判斷集合是否包含指定的obj元素。如果包含,返回true.反之返回false;
判斷的根據(jù):根據(jù)元素所在的類的equals() 方法進(jìn)行判斷
明確:如果存入集合中的元素是自定義類的對(duì)象。要求:自定義類要重寫 equals() 方法。
System.out.println(對(duì)象);可以查看集合的元素
containsAll(Collection coll):判斷當(dāng)前集合中是否包含coll中所有的元素。
retainAll(Collction coll):求當(dāng)前集合與coll的共有的元素,返回給當(dāng)前集合
remove(Object obj):刪除集合中的obj元素。若刪除成功,返回true.反之返回false.
removeAll(Collection coll):從當(dāng)前集合中刪除包含在coll中的元素。
equals(Object obj):判斷兩個(gè)集合中的所有元素是否完全相同
hashCode():hash值(暫不明白);
roArray():將集合轉(zhuǎn)化成數(shù)組。(用Object來(lái)進(jìn)行接收)。
Collection coll=Arrays . asList(1,2,3):數(shù)組轉(zhuǎn)化成集合。
iterator():返回一個(gè)Iterator接口實(shí)現(xiàn)類的對(duì)象,進(jìn)而實(shí)現(xiàn)集合的遍歷。
//方式一:不用 Iterator iterator=new Iterator(); System.out.println(iterator.next());//輸出一個(gè),有幾個(gè)打印幾次。。 //方式二:不用 for(int i=0;i<coll.size();i++){ System.out.println(iterator.next()); } //方式三:使用Iterator實(shí)現(xiàn)集合的遍歷。 Iterator iterator=new Iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); }
//使用增強(qiáng)for循環(huán)實(shí)現(xiàn)集合的遍歷 Collection coll=new ArrayList(); coll.add(123); coll.add("ASDF123"); coll.add("BB"); coll.add("AA"); coll.add(456); for(Object i:coll){//將coll賦值給i,然后打印i. System.out.println(i); }
List中相對(duì)于Collection,新增加的方法
> void add (int index, Object ele):在指定的索引位置添加元素
boolean addAll (int index, Collection eles):在指定索引位置添加一個(gè)元素集合
Object get (int index):獲取指定索引位置的元素
Object remove (int index):刪除指定索引位置的元素
Object set (int index, Object ele):設(shè)置指定索引位置的元素值
> int indexOf (Object obj) :返回obj在集合中首次出現(xiàn)的位置。沒(méi)有的話。返回 -1
int lastIndexOf (Object obj):返回obj在集合中最后一次出現(xiàn)的位置。沒(méi)有的話。返回 -1
List subList (int fromIndex, int toIndex):返回從fromeIndex到toIndex結(jié)束的左閉右開的一個(gè)子list
List常用方法:①增(add(Object ele)) ③改(set(int index, Object ele)) ⑤長(zhǎng)度(sizi())
②刪(remove) ④查(get(int index)) ⑥插(addAll(int index, Collection eles))
HashMap:Map的主要實(shí)現(xiàn)類,key是用Set來(lái)存放的,不可重復(fù)。
value是用Collection來(lái)存放的,可重復(fù)一個(gè)Key - value對(duì)。是一個(gè)Entry。所有的Entry是用Set來(lái)存放的,也是不可重復(fù)的。
向HashMap中添加元素時(shí),會(huì)調(diào)用key所在類的equals()方法,判斷兩個(gè)key是否相同。若相同則只能添加進(jìn)后添加的那個(gè)元素。
LinkedHashMap:使用鏈表維護(hù)添加進(jìn)Map中的順序,故遍歷Map時(shí),是按添加的順序遍歷的。
TreeMap:按照添加進(jìn)Map中元素的Key的指定屬性進(jìn)行排序。要求:key必須是同一個(gè)類的對(duì)象!
針對(duì)key:①自然排序 vs ②定制排序
Hashtable:古老的實(shí)現(xiàn)類,線程安全,不建議使用
properties:常用來(lái)處理屬性文件。鍵和值都為String類型的
Map與Collection并列存在。用于保存具有映射關(guān)系的數(shù)據(jù):Key-Value
Map 中的 key 和 value 都可以是任何引用類型的數(shù)據(jù)
Map 中的 key 用Set來(lái)存放,不允許重復(fù),即同一個(gè) Map 對(duì)象所對(duì)應(yīng)的類,須重寫hashCode()和equals()方法。
常用String類作為Map的“鍵”。
key 和 value 之間存在單向一對(duì)一關(guān)系,即通過(guò)指定的 key 總能找到唯一的、確定的 value。
添加、刪除
Object put(Object key,Object value):向Map中添加一個(gè)元素
Object remove(Object key):按照指定的Key刪除此key - value
void putAll(Map t):將一個(gè)新的對(duì)象中的所有元素添加進(jìn)來(lái)
void clear():清空
元素查詢
Object get(Object key):獲取指定key的value值。若無(wú)此Key,則返回null.
boolean containsKey(Object key):判斷這個(gè)map當(dāng)中是否包含指定的key的對(duì)。
boolean containsValue(Object value): 判斷是否包含value的那個(gè)對(duì)。
int size():返回集合的長(zhǎng)度
boolean isEmpty(): 判斷元素是否為空
boolean equals(Object obj):是否equals另一個(gè)
元視圖操作:遍歷Map
Set keySet()
Collection values()
Set entrySet()
①遍歷key集
Set set=new map.keySet(); for(Object obj:set){ System.out.println(obj); }
②遍歷value集
Collection values=map.value(); Iterator i=values.iterator(); while(i.hasNext()){ System.out.println(i.next()); }
③遍歷 key - value 對(duì)。
Set set=new map.keySet(); for(Object obj:set){ System.out.println(obj+"- - ->"+map.get(obj)); }
或者 :
Set set=map.entruySet(); for(Object obj:set){ Map.Entry entry =(Map.Entry)obj; System.out.println(entry.getKey()+"- - ->"+entry.getValue()); }
操作Collection以及Map的工具類:Collections
面試題:區(qū)分Collection和Collections
排序操作:
①reverse(List):反轉(zhuǎn) List 中元素的順序
②shuffle(List):對(duì) List 集合元素進(jìn)行隨機(jī)排序
③sort(List):根據(jù)元素的自然順序?qū)χ付?List 集合元素按升序排序
④sort(List,Comparator):根據(jù)指定的 Comparator 產(chǎn)生的順序?qū)?List 集合元素進(jìn)行排序
⑤swap(List,int, int):將指定 list 集合中的 i 處元素和 j 處元素進(jìn)行交換
查找、替換:
①Object max(Collection):根據(jù)元素的自然順序,返回給定集合中的最大元素
②Object max(Collection,Comparator):根據(jù) Comparator 指定的順序,返回給定集合中的最大元素
③Object min(Collection)
④Object min(Collection,Comparator)
⑤int frequency(Collection,Object):返回指定集合中指定元素的出現(xiàn)次數(shù)
⑥void copy(List dest,List src):將src中的內(nèi)容復(fù)制到dest中
⑦boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替換 List 對(duì)象的所有舊值
感謝各位的閱讀,以上就是“Java集合方法怎么用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java集合方法怎么用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。