您好,登錄后才能下訂單哦!
這篇文章主要介紹了java集合的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
從上面的集合框架圖可以看到,Java 集合框架主要包括兩種類型的容器,一種是集合(Collection),存儲一個元素集合,另一種是圖(Map),存儲鍵/值對映射。Collection 接口又有 3 種子類型,List、Set 和 Queue,再下面是一些抽象類,最后是具體實現(xiàn)類,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
集合框架是一個用來代表和操縱集合的統(tǒng)一架構(gòu)。所有的集合框架都包含如下內(nèi)容:
接口:是代表集合的抽象數(shù)據(jù)類型。例如 Collection、List、Set、Map 等。之所以定義多個接口,是為了以不同的方式操作集合對象
實現(xiàn)(類):是集合接口的具體實現(xiàn)。從本質(zhì)上講,它們是可重復(fù)使用的數(shù)據(jù)結(jié)構(gòu),例如:ArrayList、LinkedList、HashSet、HashMap。
算法:是實現(xiàn)集合接口的對象里的方法執(zhí)行的一些有用的計算,例如:搜索和排序。這些算法被稱為多態(tài),那是因為相同的方法可以在相似的接口上有著不同的實現(xiàn)。
除了集合,該框架也定義了幾個 Map 接口和類。Map 里存儲的是鍵/值對。盡管 Map 不是集合,但是它們完全整合在集合中。
1)Set 接口實例存儲的是無序的,不重復(fù)的數(shù)據(jù)。List 接口實例存儲的是有序的,可以重復(fù)的元素
2)Set 接口實例存儲的是無序的,不重復(fù)的數(shù)據(jù)。List 接口實例存儲的是有序的,可以重復(fù)的元素
3)List和數(shù)組類似,可以動態(tài)增長,根據(jù)實際存儲的數(shù)據(jù)的長度自動增長List的長度。查找元素效率高,插入刪除效率低,因為會引起其他元素位置改變 <實現(xiàn)類有ArrayList,LinkedList,Vector>
ArrayList 類是一個可以動態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。
ArrayList 繼承了 AbstractList ,并實現(xiàn)了 List 接口。
ArrayList 類位于 java.util 包中,使用前需要引入它,語法格式如下:
import java.util.ArrayList; // 引入 ArrayList 類 ArrayList<E> objectName =new ArrayList<>(); // 初始化
@Test public void listTest(){ List<Integer> list = new ArrayList<Integer>(); //增加元素 list.add(1); list.add(9); list.add(8); list.add(4); list.add(5); list.add(3); //訪問 System.out.println("list新增完元素訪問:"); for(int s : list){ System.out.print(s+" "); } System.out.println(); //用set方法修改 list.set(2, 10); //訪問 System.out.println("list修改完元素訪問:"); for(int s : list){ System.out.print(s+" "); } System.out.println(); list.remove(2); //訪問 System.out.println("list刪除完元素訪問:"); for(int s : list){ System.out.print(s+" "); } System.out.println(); //當(dāng)前l(fā)ist大小 System.out.println("list當(dāng)前數(shù)據(jù)元素個數(shù):"+list.size()); //排序 Collections.sort(list);//默認(rèn)升序 //訪問 System.out.println("list排序完元素訪問:"); for(int s : list){ System.out.print(s+" "); } System.out.println(); }
結(jié)果:
list新增完元素訪問:
1 9 8 4 5 3
list修改完元素訪問:
1 9 10 4 5 3
list刪除完元素訪問:
1 9 4 5 3
list當(dāng)前數(shù)據(jù)元素個數(shù):5
list排序完元素訪問:
1 3 4 5 9
Java ArrayList 常用方法列表如下:
方法 | 描述 |
---|---|
add() | 將元素插入到指定位置的 arraylist 中 |
addAll() | 添加集合中的所有元素到 arraylist 中 |
clear() | 刪除 arraylist 中的所有元素 |
clone() | 復(fù)制一份 arraylist |
contains() | 判斷元素是否在 arraylist |
get() | 通過索引值獲取 arraylist 中的元素 |
indexOf() | 返回 arraylist 中元素的索引值 |
removeAll() | 刪除存在于指定集合中的 arraylist 里的所有元素 |
remove() | 刪除 arraylist 里的單個元素 |
size() | 返回 arraylist 里元素數(shù)量 |
isEmpty() | 判斷 arraylist 是否為空 |
subList() | 截取部分 arraylist 的元素 |
set() | 替換 arraylist 中指定索引的元素 |
sort() | 對 arraylist 元素進行排序 |
toArray() | 將 arraylist 轉(zhuǎn)換為數(shù)組 |
toString() | 將 arraylist 轉(zhuǎn)換為字符串 |
ensureCapacity() | 設(shè)置指定容量大小的 arraylist |
lastIndexOf() | 返回指定元素在 arraylist 中最后一次出現(xiàn)的位置 |
retainAll() | 保留 arraylist 中在指定集合中也存在的那些元素 |
containsAll() | 查看 arraylist 是否包含指定集合中的所有元素 |
trimToSize() | 將 arraylist 中的容量調(diào)整為數(shù)組中的元素個數(shù) |
removeRange() | 刪除 arraylist 中指定索引之間存在的元素 |
replaceAll() | 將給定的操作內(nèi)容替換掉數(shù)組中每一個元素 |
removeIf() | 刪除所有滿足特定條件的 arraylist 元素 |
forEach() | 遍歷 arraylist 中每一個元素并執(zhí)行特定操作 |
鏈表(Linked list)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會按線性的順序存儲數(shù)據(jù),而是在每一個節(jié)點里存到下一個節(jié)點的地址。
鏈表可分為單向鏈表和雙向鏈表。
一個單向鏈表包含兩個值: 當(dāng)前節(jié)點的值和一個指向下一個節(jié)點的鏈接
一個雙向鏈表有三個整數(shù)值: 數(shù)值、向后的節(jié)點鏈接、向前的節(jié)點鏈接。
Java LinkedList(鏈表) 類似于 ArrayList,是一種常用的數(shù)據(jù)容器。
與 ArrayList 相比,LinkedList 的增加和刪除對操作效率更高,而查找和修改的操作效率較低。
以下情況使用 ArrayList :
頻繁訪問列表中的某一個元素。只需要在列表末尾進行添加和刪除元素操作。
以下情況使用 LinkedList :
你需要通過循環(huán)迭代來訪問列表中的某些元素。需要頻繁的在列表開頭、中間、末尾等位置進行添加和刪除元素操作。
// 引入 LinkedList 類 import java.util.LinkedList; LinkedList<E> list = new LinkedList<E>(); // 普通創(chuàng)建方法 或者 LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合創(chuàng)建鏈表
@Test public void linkListTest(){ LinkedList<Integer> nums = new LinkedList<Integer>(); //添加 nums.add(3); nums.add(5); nums.add(1); nums.add(8); System.out.println(nums); // 使用 addFirst() 在頭部添加元素 nums.addFirst(0); System.out.println(nums); nums.addLast(20); System.out.println(nums); //移除首位 nums.removeFirst(); System.out.println(nums); // 使用 getFirst() 獲取頭部元素 System.out.println(nums.getFirst()); //for循環(huán)迭代 for (int size = nums.size(), i = 0; i < size; i++) { System.out.println(nums.get(i)); } }
結(jié)果:
[3, 5, 1, 8]
[0, 3, 5, 1, 8]
[0, 3, 5, 1, 8, 20]
[3, 5, 1, 8, 20]
3
3
5
1
8
20
方法 | 描述 |
---|---|
public boolean add(E e) | 鏈表末尾添加元素,返回是否成功,成功為 true,失敗為 false。 |
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 將一個集合的所有元素添加到鏈表后面,返回是否成功,成功為 true,失敗為 false。 |
public boolean addAll(int index, Collection c) | 將一個集合的所有元素添加到鏈表的指定位置后面,返回是否成功,成功為 true,失敗為 false。 |
public void addFirst(E e) | 元素添加到頭部。 |
public void addLast(E e) | 元素添加到尾部。 |
public boolean offer(E e) | 向鏈表末尾添加元素,返回是否成功,成功為 true,失敗為 false。 |
public boolean offerFirst(E e) | 頭部插入元素,返回是否成功,成功為 true,失敗為 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功為 true,失敗為 false。 |
public void clear() | 清空鏈表。 |
public E removeFirst() | 刪除并返回第一個元素。 |
public E removeLast() | 刪除并返回最后一個元素。 |
public boolean remove(Object o) | 刪除某一元素,返回是否成功,成功為 true,失敗為 false。 |
public E remove(int index) | 刪除指定位置的元素。 |
public E poll() | 刪除并返回第一個元素。 |
public E remove() | 刪除并返回第一個元素。 |
public boolean contains(Object o) | 判斷是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一個元素。 |
public E getLast() | 返回最后一個元素。 |
public int indexOf(Object o) | 查找指定元素從前往后第一次出現(xiàn)的索引。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出現(xiàn)的索引。 |
public E peek() | 返回第一個元素。 |
public E element() | 返回第一個元素。 |
public E peekFirst() | 返回頭部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 設(shè)置指定位置的元素。 |
public Object clone() | 克隆該列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回鏈表元素個數(shù)。 |
public ListIterator listIterator(int index) | 返回從指定位置開始到末尾的迭代器。 |
public Object[] toArray() | 返回一個由鏈表元素組成的數(shù)組。 |
public T[] toArray(T[] a) | 返回一個由鏈表元素轉(zhuǎn)換類型而成的數(shù)組。 |
HashSet 基于 HashMap 來實現(xiàn)的,是一個不允許有重復(fù)元素的集合。
HashSet 允許有 null 值。
HashSet 是無序的,即不會記錄插入的順序。
HashSet 不是線程安全的, 如果多個線程嘗試同時修改 HashSet,則最終結(jié)果是不確定的。 您必須在多線程訪問時顯式同步對 HashSet 的并發(fā)訪問。
HashSet 實現(xiàn)了 Set 接口。
import java.util.HashSet; // 引入 HashSet 類 HashSet<String> sites = new HashSet<String>();
@Test public void setTest(){ Set<Integer> nums = new HashSet<Integer>(); //添加 nums.add(3); nums.add(5); nums.add(5); nums.add(5); nums.add(1); nums.add(8); System.out.println(nums); //判斷元素是否存在 System.out.println(nums.contains(8)); nums.remove(1); // 刪除元素,刪除成功返回 true,否則為 false System.out.println(nums); //計算大小 System.out.println(nums.size()); for (int i : nums) {//訪問 System.out.println(i); } //清除 nums.clear(); System.out.println(nums); }
結(jié)果:
[1, 3, 5, 8]
true
[3, 5, 8]
3
3
5
8
[]
HashMap 是一個散列表,它存儲的內(nèi)容是鍵值對(key-value)映射。
HashMap 實現(xiàn)了 Map 接口,根據(jù)鍵的 HashCode 值存儲數(shù)據(jù),具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。
HashMap 是無序的,即不會記錄插入的順序。
HashMap 繼承于AbstractMap,實現(xiàn)了 Map、Cloneable、java.io.Serializable 接口。
HashMap 的 key 與 value 類型可以相同也可以不同,可以是字符串(String)類型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)類型的 value。
import java.util.HashMap; // 引入 HashMap 類 HashMap<Integer, String> Sites = new HashMap<Integer, String>();
@Test public void mapTest(){ // 創(chuàng)建 HashMap 對象 Sites HashMap<String, String> sites = new HashMap<String, String>(); // 添加鍵值對 sites.put("one", "Google"); sites.put("two", "Runoob"); sites.put("three", "Taobao"); sites.put("four", "Zhihu"); System.out.println(sites); //訪問-根據(jù)key System.out.println(sites.get("four")); //刪除 sites.remove("four"); System.out.println(sites); //計算大小 System.out.println(sites.size()); // 輸出 key 和 value for (String i : sites.keySet()) { System.out.println("key: " + i + " value: " + sites.get(i)); } // 返回所有 value 值 for(String value: sites.values()) { // 輸出每一個value System.out.print(value + ", "); } }
結(jié)果:
{four=Zhihu, one=Google, two=Runoob, three=Taobao}
Zhihu
{one=Google, two=Runoob, three=Taobao}
3
key: one value: Google
key: two value: Runoob
key: three value: Taobao
Google, Runoob, Taobao,
hashmap
Java HashMap 常用方法列表如下:
方法 | 描述 |
---|---|
clear() | 刪除 hashMap 中的所有鍵/值對 |
clone() | 復(fù)制一份 hashMap |
isEmpty() | 判斷 hashMap 是否為空 |
size() | 計算 hashMap 中鍵/值對的數(shù)量 |
put() | 將鍵/值對添加到 hashMap 中 |
putAll() | 將所有鍵/值對添加到 hashMap 中 |
putIfAbsent() | 如果 hashMap 中不存在指定的鍵,則將指定的鍵/值對插入到 hashMap 中。 |
remove() | 刪除 hashMap 中指定鍵 key 的映射關(guān)系 |
containsKey() | 檢查 hashMap 中是否存在指定的 key 對應(yīng)的映射關(guān)系。 |
containsValue() | 檢查 hashMap 中是否存在指定的 value 對應(yīng)的映射關(guān)系。 |
replace() | 替換 hashMap 中是指定的 key 對應(yīng)的 value。 |
replaceAll() | 將 hashMap 中的所有映射關(guān)系替換成給定的函數(shù)所執(zhí)行的結(jié)果。 |
get() | 獲取指定 key 對應(yīng)對 value |
getOrDefault() | 獲取指定 key 對應(yīng)對 value,如果找不到 key ,則返回設(shè)置的默認(rèn)值 |
forEach() | 對 hashMap 中的每個映射執(zhí)行指定的操作。 |
entrySet() | 返回 hashMap 中所有映射項的集合集合視圖。 |
keySet() | 返回 hashMap 中所有 key 組成的集合視圖。 |
values() | 返回 hashMap 中存在的所有 value 值。 |
merge() | 添加鍵值對到 hashMap 中 |
compute() | 對 hashMap 中指定 key 的值進行重新計算 |
computeIfAbsent() | 對 hashMap 中指定 key 的值進行重新計算,如果不存在這個 key,則添加到 hasMap 中 |
computeIfPresent() | 對 hashMap 中指定 key 的值進行重新計算,前提是該 key 存在于 hashMap 中。 |
Java Iterator(迭代器)不是一個集合,它是一種用于訪問集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
Iterator 是 Java 迭代器最簡單的實現(xiàn),ListIterator 是 Collection API 中的接口, 它擴展了 Iterator 接口。
@Test public void iteratorTest(){ List<Integer> list = new ArrayList<Integer>(); //增加元素 list.add(1); list.add(9); list.add(8); list.add(4); list.add(5); list.add(3); Iterator<Integer> it = list.iterator(); while(it.hasNext()){ int i = it.next(); System.out.print(i+" "); } }
結(jié)果:
1 9 8 4 5 3
@Test public void arrToListTest(){ List<Integer> list = new ArrayList<Integer>(); //增加元素 list.add(1); list.add(9); list.add(8); list.add(4); list.add(5); list.add(3); Object[] arr = list.toArray(); for(Object o : arr){ System.out.print(o+" "); } System.out.println(); List<Object> ll = Arrays.asList(arr); System.out.println(ll); }
結(jié)果:
1 9 8 4 5 3
[1, 9, 8, 4, 5, 3]
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“java集合的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。