來盤點一下2020年頂級Java框架大集合,附教程


直接上圖:

來盤點一下2020年頂級Java框架大集合,附教程

從上面的集合框架圖可以看到:Java集合框架主要包括兩種類型的容器,一種是集合(Collection),存儲一個元素集合;另一種是圖(Map),存儲鍵/值對映射。Collection接口又有兩個子接口,List和Set,再下面是一些抽象類,最後是具體實現類,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等等。

集合框架是一個用來代表和操縱集合的統一框架。所有的集合框架都包含如下內容:

接口:是代表集合的抽象數據類型。例如:Collection、List、Set、Map等。之所以定義多個接口,是為了以不同的方式操作集合對象。

實現(類):是集合接口的具體實現。從本質上講,它們是可重複使用的數據結構,例如:ArrayList、LinkedList、HashSet、HashMap。

除了集合,該框架也定義了幾個Map接口和類。Map裡存儲的是鍵/值對。儘管Map不是集合,但是它們完全整合在集合中。Java集合框架提供了一套性能優良,使用方便的接口和類,Java集合框架位於java.util包中,所以當使用集合框架的時候需要進行導包。

一、集合接口:

1.Collection

Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素,Java不提供直接繼承自Collection的類,只提供繼承於Collection的子接口(如List和Set),Collection接口存儲一組不唯一,沒有順序的對象。

2.List

List接口是一個有順序的Collection,使用此接口能夠精確地控制每個元素插入的位置,能夠通過索引(元素在List中的位置,類似於數組的下標)來訪問List 中的元素,第一個元素的索引為0,而且允許有相同的元素。List接口存儲一組不唯一,有序(插入順序)的對象。

3.Set

Set具有與List完全一樣的接口,只是行為上不同,Set不保存重複的元素。Set接口存儲一組唯一,無序的對象。

4.Map

Map接口存儲一組鍵值對對象,提供key(鍵)到value(值)的映射。

5.Map.Entry

Map.Entry描述在一個Map中的一個元素(鍵/值對),是一個Map的內部接口。

二、Set和List的區別:

1.Set接口實例存儲的是無序的,不重複的數據。List接口實例存儲的是有序的,可以重複的元素。

2.Set檢索效率低下,刪除和插入效率高,插入和刪除不會引起元素位置的改變,實現類有HashSet,TreeSet。

3.List和數組類似,可以動態增長,根據實際存儲的數據的長度自動增長List的長度。查找元素效率高,插入刪除效率低,因為會引起其他元素位置改變,實現類有ArrayList,LinkedList,Vector。

三、集合實現類

1.AbstractCollection:實現了大部分的集合接口。

2.AbstractList:繼承於AbstractCollection並且實現了大部分List接口。

3.LinkedList:該類實現了List接口,允許有null元素。主要用於創建鏈表數據結構,LinkedList查找效率低。

4.ArrayList:該類也是實現了List的接口,實現了可變大小的數組,隨機訪問和遍歷元素時,提供更好地性能。

5.AbstractSet:繼承於AbstractCollection並且實現了大部分Set接口。

6.HashSet:該類實現了Set接口,不允許出現重複元素,不保證集合中元素的順序,允許包含值為null的元素,但最多隻能有一個。

7.LinkedHashSet:具有可預知迭代順序的Set接口的哈希表和鏈表列表實現。

8.TreeSet:該類實現了Set接口,可以實現排序等功能。

9.AbstractMap:實現了大部分的Map接口。

10.HashMap:HashMap是一個散列表,它存儲的內容是鍵值對(key-value)映射。該類實現了Map接口,根據鍵的HashCode值存儲數據,具有很快的訪問速度,最多允許一條記錄的鍵為null,不支持線程同步。

11.TreeMap:繼承了AbstractMap,並且使用一棵樹。

12.LinkedHashMap:繼承於HashMap,使用元素的自然順序對元素進行排序。

13.Vector:該類和ArrayList非常相似,但是該類是同步的,可以用在多線程的情況,該類允許設置默認的增長長度,默認擴容方式為原來的2倍。

14.HashTable:HashTable是Dictionary(字典)類的子類,位於java.util包中。

四、迭代器的使用(遍歷集合)

1、遍歷ArrayList

<code>/**
* 採用不同的方法遍歷ArrayList集合
* 其中採用迭代器的方法可以不用擔心在遍歷的過程中會超出集合的長度
*
*/

public class TestArrayList {
public static void main(String[] args) {
List<string> list = new ArrayList<>();
list.add("吳永吉");
list.add("吳宇濤");
list.add("吳旭東");

//第一種遍歷:使用普通for
System.out.println("第一種遍歷:");
for(int i=0;i<list.size> System.out.println(list.get(i));
}

//第二種遍歷:使用foreach
System.out.println("第二種遍歷:");
for(String str:list) {
System.out.println(str);
}

//第三種遍歷:將list轉換為數組相關的內容進行遍歷
System.out.println("第三種遍歷:");
String[] strArray = new String[list.size()];
list.toArray(strArray);
for(String str:strArray) {
System.out.println(str);
}

//第四種遍歷:使用迭代器進行遍歷
System.out.println("第四種遍歷:");
Iterator<string> iter = list.iterator();
while(iter.hasNext()) { //判斷下一個元素之後是否有值
System.out.println(iter.next());
}
}
}/<string>/<list.size>/<string>/<code>

2、遍歷HashSet

<code>/**
* 採用不同的方法遍歷HashSet集合

*
*/
public class TestHashSet {
public static void main(String[] args) {
Set<string> set = new HashSet<>();
set.add("吳永吉");
set.add("吳宇濤");
set.add("吳旭東");

//第一種遍歷:使用foreach
System.out.println("第一種遍歷:");
for(String str:set) {
System.out.println(str);
}

//第二種遍歷:將set轉換為數組相關的內容進行遍歷
System.out.println("第二種遍歷:");
String[] strArray = new String[set.size()];
set.toArray(strArray);
for(String str:strArray) {
System.out.println(str);
}

//第三種遍歷:使用迭代器進行遍歷
System.out.println("第三種遍歷:");
Iterator<string> iter = set.iterator();
while(iter.hasNext()) { //判斷下一個元素之後是否有值
System.out.println(iter.next());
}
}
}/<string>/<string>/<code>

 3、遍歷HashMap

<code>/**
* 採用不同的方式遍歷HashMap集合
*
*/
public class TestHashMap {
public static void main(String[] args) {
Map<integer> map = new HashMap<>();

map.put(1, "吳永吉");
map.put(2, "吳宇濤");
map.put(3, "吳旭東");

//第一種遍歷:使用Map.keySet遍歷key和value
System.out.println("第一種遍歷:");
for(Integer key:map.keySet()) {
System.out.println("key:"+key+",value:"+map.get(key));
}

//第二種遍歷:通過Map.entrySet使用iterator遍歷key和value
System.out.println("第二種遍歷:");
Iterator<map.entry>> iter = map.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry<integer> entry = iter.next();
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
}

//第三種遍歷:通過Map.entrySet遍歷key和value
System.out.println("第三種遍歷:");
for(Map.Entry<integer> entry:map.entrySet()) {
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
}

//第四種遍歷:通過Map.values()遍歷所有的value,但不能遍歷key
System.out.println("第四種遍歷:");
for(String str:map.values()) {
System.out.println("value:"+str);
}
}
}/<integer>/<integer>/<map.entry>/<integer>/<code>

五、總結:

Java集合框架為程序員提供了預先包裝的數據結構來操縱它們,集合是一個對象,可容納其它對象的引用。集合接口聲明對每一種類型的集合可以執行相應的操作。集合框架的類和接口均在java.util包中。在使用泛型的情況下,泛型中的數據類型會限制集合中相應的數據類型,所以在取出時就是泛型中規定的數據類型;當沒有使用泛型時,有任何對象加入集合類後,會自動轉變為Object類型,所以在取出的時候,需要進行強制類型轉換。

來盤點一下2020年頂級Java框架大集合,附教程

來盤點一下2020年頂級Java框架大集合,附教程

現在開放資源免費領取,送給需要java,架構視頻資料、電子書和Java面試文件,以及想要提升技術的朋友。需要可以轉發文章後臺私信“資料”獲取


分享到:


相關文章: