日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java集合集锦

發(fā)布時間:2025/3/17 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合集锦 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、介紹Collection框架的結(jié)構(gòu)

集合是Java中的一個非常重要的一個知識點,主要分為List、Set、Map、Queue三大數(shù)據(jù)結(jié)構(gòu)。它們在Java中的結(jié)構(gòu)關(guān)系如下:

Collection接口是List、Set、Queue的父級接口。

Set接口有兩個常用的實現(xiàn)類:HashSet和TreeSet。List接口的常用接口有ArrayList和Vector接口。

Map接口有兩個常用的實現(xiàn)類:Hashtable和HashMap。

2、Collection框架中實現(xiàn)比較要實現(xiàn)什么接口

要實現(xiàn)比較有兩種方式:第一種,實體類實現(xiàn)Comparable<T>接口,并實現(xiàn) compareTo(T t) 方法,我們稱為內(nèi)部比較器。第二種,創(chuàng)建一個外部比較器,這個外部比較器要實現(xiàn)Comparator接口的 compare(T t1, T t2)。

第一種,實現(xiàn)Comparable接口:

?View Code

第二種,實現(xiàn)Comparator接口:

先定義一個Student類,無須實現(xiàn)任何接口。

?View Code

定義一個外部比較器類,實現(xiàn)Comparator接口:

?View Code

由此可見,如果你希望該實體類在放入集合的時候能按照你希望的方式排序(如果集合支持),那么你需要讓實體類實現(xiàn)Comparable接口。如果你只是需要簡單比較兩個實體類的大小,最后返回一個結(jié)果,那么用Comparator接口實現(xiàn)一個外部比較器更合適。

3、ArrayList和Vector的區(qū)別(是否有序、是否重復(fù)、數(shù)據(jù)結(jié)構(gòu)、底層實現(xiàn))

ArrayList和Vector都實現(xiàn)了List接口,他們都是有序集合,并且存放的元素是允許重復(fù)的。它們的底層都是通過數(shù)組來實現(xiàn)的,因此列表這種數(shù)據(jù)結(jié)構(gòu)檢索數(shù)據(jù)速度快,但增刪改速度慢。

而ArrayList和Vector的區(qū)別主要在兩個方面:

第一,線程安全。Vector是線程安全的,而ArrayList是線程不安全的。因此在如果集合數(shù)據(jù)只有單線程訪問,那么使用ArrayList可以提高效率。而如果有多線程訪問你的集合數(shù)據(jù),那么就必須要用Vector,因為要保證數(shù)據(jù)安全。

第二,數(shù)據(jù)增長。ArrayList和Vector都有一個初始的容量大小,當(dāng)存儲進它們里面的元素超過了容量時,就需要增加它們的存儲容量。ArrayList每次增長原來的0.5倍,而Vector增長原來的一倍。ArrayList和Vector都可以設(shè)置初始空間的大小,Vector還可以設(shè)置增長的空間大小,而ArrayList沒有提供設(shè)置增長空間的方法。

4、HashMap和Hashtable的區(qū)別

HashMap和Hashtable都實現(xiàn)了Map接口,并且都是key-value的數(shù)據(jù)結(jié)構(gòu)。它們的不同點主要在三個方面:

第一,Hashtable是Java1.1的一個類,它基于陳舊的Dictionary類。而HashMap是Java1.2引進的Map接口的一個實現(xiàn)。

第二,Hashtable是線程安全的,也就是說是線程同步的,而HashMap是線程不安全的。也就是說在單線程環(huán)境下應(yīng)該用HashMap,這樣效率更高。

第三,HashMap允許將null值作為key或value,但Hashtable不允許(會拋出NullPointerException)。

5、List 和 Map 區(qū)別?(數(shù)據(jù)結(jié)構(gòu),存儲特點)

這個要從兩個方面來回答,一方面是List和Map的數(shù)據(jù)結(jié)構(gòu),另一方面是存儲數(shù)據(jù)的特點。在數(shù)據(jù)結(jié)構(gòu)方面,List存儲的是單列數(shù)據(jù)的集合,而Map存儲的是key、value類型的數(shù)據(jù)集合。在數(shù)據(jù)存儲方面,List存儲的數(shù)據(jù)是有序且可以重復(fù)的,而Map中存儲的數(shù)據(jù)是無序且key值不能重復(fù)(value值可以重復(fù))。

6、List、Map、Set三個接口,存取元素時,各有什么特點?

List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個功共同的父接口,叫Collection。Set里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個相等(注意,不是僅僅是相同)的對象 ,即假設(shè)Set集合中有了一個A對象,現(xiàn)在我要向Set集合再存入一個B對象,但B對象與A對象equals相等,則B對象存儲不進去。所以,Set集合的add方法有一個boolean的返回值,當(dāng)集合中沒有某個元素,此時add方法可成功加入該元素時,則返回true,當(dāng)集合含有與某個元素equals相等的元素時,此時add方法無法加入該元素,返回結(jié)果為false。Set取元素時,沒法說取第幾個,只能以Iterator接口取得所有的元素,再逐一遍歷各個元素。

List表示有先后順序的集合, 注意,不是那種按年齡、按大小、按價格之類的排序。當(dāng)我們多次調(diào)用add(Obj e)方法時,每次加入的對象就像火車站買票有排隊順序一樣,按先來后到的順序排序。有時候,也可以插隊,即調(diào)用add(int index,Obj e)方法,就可以指定當(dāng)前對象在集合中的存放位置。一個對象可以被反復(fù)存儲進List中,每調(diào)用一次add方法,這個對象就被插入進集合中一次,其實,并不是把這個對象本身存儲進了集合中,而是在集合中用一個索引變量指向這個對象,當(dāng)這個對象被add多次時,即相當(dāng)于集合中有多個索引指向了這個對象,如圖x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍歷各個元素之外,還可以調(diào)用get(index i)來明確說明取第幾個。

Map與List和Set不同,它是雙列的集合,其中有put方法,定義如下:put(obj key,obj value),每次存儲時,要存儲一對key/value,不能存儲重復(fù)的key,這個重復(fù)的規(guī)則也是按equals比較相等。取則可以根據(jù)key獲得相應(yīng)的value,即get(Object key)返回值為key 所對應(yīng)的value。另外,也可以獲得所有的key的結(jié)合(map.keySet()),還可以獲得所有的value的結(jié)合(map.values()),還可以獲得key和value組合成的Map.Entry對象的集合(map.entrySet())。

List 以特定次序來持有元素,可有重復(fù)元素。Set 無法擁有重復(fù)元素,內(nèi)部排序。Map 保存key-value值,value可多值。

?

總結(jié)

以上是生活随笔為你收集整理的Java集合集锦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。