最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你入門java集合

 更新時間:2021年08月04日 16:24:52   作者:wwwzhouzy  
Java的集合類型都是對java.util包中Collection接口的繼承,這里我們主要介紹依賴于collection的一些主分支,一起來看一下Java中的collection集合類型總結

一、簡介

1、java集合框架圖

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

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

  • 接口:是代表集合的抽象數(shù)據(jù)類型。例如 Collection、List、Set、Map 等。之所以定義多個接口,是為了以不同的方式操作集合對象
  • 實現(xiàn)(類):是集合接口的具體實現(xiàn)。從本質上講,它們是可重復使用的數(shù)據(jù)結構,例如:ArrayList、LinkedList、HashSet、HashMap。
  • 算法:是實現(xiàn)集合接口的對象里的方法執(zhí)行的一些有用的計算,例如:搜索和排序。這些算法被稱為多態(tài),那是因為相同的方法可以在相似的接口上有著不同的實現(xiàn)。

除了集合,該框架也定義了幾個 Map 接口和類。Map 里存儲的是鍵/值對。盡管 Map 不是集合,但是它們完全整合在集合中。

2、集合框架體系

3、Set和List的區(qū)別

1)Set 接口實例存儲的是無序的,不重復的數(shù)據(jù)。List 接口實例存儲的是有序的,可以重復的元素

2)Set 接口實例存儲的是無序的,不重復的數(shù)據(jù)。List 接口實例存儲的是有序的,可以重復的元素

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

二、ArrayList

1、定義

ArrayList 類是一個可以動態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。

ArrayList 繼承了 AbstractList ,并實現(xiàn)了 List 接口。

ArrayList 類位于 java.util 包中,使用前需要引入它,語法格式如下:

import java.util.ArrayList; // 引入 ArrayList 類
ArrayList<E> objectName =new ArrayList<>();  // 初始化

2、用實例了解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();
		//當前l(fā)ist大小
		System.out.println("list當前數(shù)據(jù)元素個數(shù):"+list.size());
		//排序
		Collections.sort(list);//默認升序
		//訪問
		System.out.println("list排序完元素訪問:");
		for(int s : list){
			System.out.print(s+" ");
		}
		System.out.println();
	}

結果:

list新增完元素訪問:
1 9 8 4 5 3
list修改完元素訪問:
1 9 10 4 5 3
list刪除完元素訪問:
1 9 4 5 3
list當前數(shù)據(jù)元素個數(shù):5
list排序完元素訪問:
1 3 4 5 9

Java ArrayList 常用方法列表如下:

方法 描述
add() 將元素插入到指定位置的 arraylist 中
addAll() 添加集合中的所有元素到 arraylist 中
clear() 刪除 arraylist 中的所有元素
clone() 復制一份 arraylist
contains() 判斷元素是否在 arraylist
get() 通過索引值獲取 arraylist 中的元素
indexOf() 返回 arraylist 中元素的索引值
removeAll() 刪除存在于指定集合中的 arraylist 里的所有元素
remove() 刪除 arraylist 里的單個元素
size() 返回 arraylist 里元素數(shù)量
isEmpty() 判斷 arraylist 是否為空
subList() 截取部分 arraylist 的元素
set() 替換 arraylist 中指定索引的元素
sort() 對 arraylist 元素進行排序
toArray() 將 arraylist 轉換為數(shù)組
toString() 將 arraylist 轉換為字符串
ensureCapacity() 設置指定容量大小的 arraylist
lastIndexOf() 返回指定元素在 arraylist 中最后一次出現(xiàn)的位置
retainAll() 保留 arraylist 中在指定集合中也存在的那些元素
containsAll() 查看 arraylist 是否包含指定集合中的所有元素
trimToSize() 將 arraylist 中的容量調整為數(shù)組中的元素個數(shù)
removeRange() 刪除 arraylist 中指定索引之間存在的元素
replaceAll() 將給定的操作內容替換掉數(shù)組中每一個元素
removeIf() 刪除所有滿足特定條件的 arraylist 元素
forEach() 遍歷 arraylist 中每一個元素并執(zhí)行特定操作

三、LinkedList

鏈表(Linked list)是一種常見的基礎數(shù)據(jù)結構,是一種線性表,但是并不會按線性的順序存儲數(shù)據(jù),而是在每一個節(jié)點里存到下一個節(jié)點的地址。

鏈表可分為單向鏈表和雙向鏈表。

一個單向鏈表包含兩個值: 當前節(jié)點的值和一個指向下一個節(jié)點的鏈接

一個雙向鏈表有三個整數(shù)值: 數(shù)值、向后的節(jié)點鏈接、向前的節(jié)點鏈接。

Java LinkedList(鏈表) 類似于 ArrayList,是一種常用的數(shù)據(jù)容器。

與 ArrayList 相比,LinkedList 的增加和刪除對操作效率更高,而查找和修改的操作效率較低。

以下情況使用 ArrayList :

頻繁訪問列表中的某一個元素。只需要在列表末尾進行添加和刪除元素操作。

以下情況使用 LinkedList :

你需要通過循環(huán)迭代來訪問列表中的某些元素。需要頻繁的在列表開頭、中間、末尾等位置進行添加和刪除元素操作。

1、語法

// 引入 LinkedList 類
import java.util.LinkedList; 
LinkedList<E> list = new LinkedList<E>();   // 普通創(chuàng)建方法
或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合創(chuàng)建鏈表

2、示例

    @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));
        }
	}

結果:

[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) 設置指定位置的元素。
public Object clone() 克隆該列表。
public Iterator descendingIterator() 返回倒序迭代器。
public int size() 返回鏈表元素個數(shù)。
public ListIterator listIterator(int index) 返回從指定位置開始到末尾的迭代器。
public Object[] toArray() 返回一個由鏈表元素組成的數(shù)組。
public T[] toArray(T[] a) 返回一個由鏈表元素轉換類型而成的數(shù)組。

四、HashSet

1、定義

HashSet 基于 HashMap 來實現(xiàn)的,是一個不允許有重復元素的集合。

HashSet 允許有 null 值。

HashSet 是無序的,即不會記錄插入的順序。

HashSet 不是線程安全的, 如果多個線程嘗試同時修改 HashSet,則最終結果是不確定的。 您必須在多線程訪問時顯式同步對 HashSet 的并發(fā)訪問。

HashSet 實現(xiàn)了 Set 接口。

2、語法

import java.util.HashSet; // 引入 HashSet 類
HashSet<String> sites = new HashSet<String>();

3、示例

    @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);
	}

結果:

[1, 3, 5, 8]
true
[3, 5, 8]
3
3
5
8
[]

五、HashMap

1、定義

HashMap 是一個散列表,它存儲的內容是鍵值對(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。

2、語法

import java.util.HashMap; // 引入 HashMap 類
HashMap<Integer, String> Sites = new HashMap<Integer, String>();

3、示例

    @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 + ", ");
        }
	}

結果:

{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,

Java HashMap 方法

hashmap

Java HashMap 常用方法列表如下:

方法 描述
clear() 刪除 hashMap 中的所有鍵/值對
clone() 復制一份 hashMap
isEmpty() 判斷 hashMap 是否為空
size() 計算 hashMap 中鍵/值對的數(shù)量
put() 將鍵/值對添加到 hashMap 中
putAll() 將所有鍵/值對添加到 hashMap 中
putIfAbsent() 如果 hashMap 中不存在指定的鍵,則將指定的鍵/值對插入到 hashMap 中。
remove() 刪除 hashMap 中指定鍵 key 的映射關系
containsKey() 檢查 hashMap 中是否存在指定的 key 對應的映射關系。
containsValue() 檢查 hashMap 中是否存在指定的 value 對應的映射關系。
replace() 替換 hashMap 中是指定的 key 對應的 value。
replaceAll() 將 hashMap 中的所有映射關系替換成給定的函數(shù)所執(zhí)行的結果。
get() 獲取指定 key 對應對 value
getOrDefault() 獲取指定 key 對應對 value,如果找不到 key ,則返回設置的默認值
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 中。

六、Iterator(迭代器)

1、定義

Java Iterator(迭代器)不是一個集合,它是一種用于訪問集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。

Iterator 是 Java 迭代器最簡單的實現(xiàn),ListIterator 是 Collection API 中的接口, 它擴展了 Iterator 接口。

2、示例

    @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+" ");
		}
	}

結果:

1 9 8 4 5 3

七、List和數(shù)組互轉

    @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);
	}

結果:

1 9 8 4 5 3
[1, 9, 8, 4, 5, 3]

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • 基于Idea+Jconsole實現(xiàn)線程監(jiān)控步驟

    基于Idea+Jconsole實現(xiàn)線程監(jiān)控步驟

    這篇文章主要介紹了基于Idea+Jconsole實現(xiàn)線程監(jiān)控功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot上傳文件大小受限問題的解決辦法

    SpringBoot上傳文件大小受限問題的解決辦法

    最近有一次由于項目升級發(fā)現(xiàn)了一個上傳方面的問題,下面這篇文章主要給大家介紹了關于SpringBoot上傳文件大小受限問題的解決辦法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Java使用設計模式中的工廠方法模式實例解析

    Java使用設計模式中的工廠方法模式實例解析

    當系統(tǒng)準備為用戶提供某個類的子類的實例,又不想讓用戶代碼和該子類形成耦合時,就可以使用工廠方法模式來設計系統(tǒng).工廠方法模式的關鍵是在一個接口或抽象類中定義一個抽象方法,下面我們會具體介紹Java使用設計模式中的工廠方法模式實例解析.
    2016-05-05
  • Java程序員編程性能優(yōu)化必備的34個小技巧(總結)

    Java程序員編程性能優(yōu)化必備的34個小技巧(總結)

    這篇文章主要介紹了Java程序員編程性能優(yōu)化必備的34個小技巧(總結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-07-07
  • 分享java打印簡單圖形的實現(xiàn)代碼

    分享java打印簡單圖形的實現(xiàn)代碼

    這篇文章主要分享給大家運用java打印簡單圖形:三角形,菱形,四邊形,需要的朋友可以參考下
    2015-07-07
  • IDEA版使用Java操作Redis數(shù)據(jù)庫的方法

    IDEA版使用Java操作Redis數(shù)據(jù)庫的方法

    這篇文章主要介紹了IDEA版使用Java操作Redis數(shù)據(jù)庫的方法,首先需要下載jedis.jar包,然后再工程中設置具體操作步驟跟隨小編一起學習下吧
    2021-08-08
  • MyBatis分頁插件PageHelper的具體使用

    MyBatis分頁插件PageHelper的具體使用

    這篇文章主要介紹了MyBatis分頁插件PageHelper的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Java Comparator.comparing比較導致空指針異常的解決

    Java Comparator.comparing比較導致空指針異常的解決

    這篇文章主要介紹了Java Comparator.comparing比較導致空指針異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Elasticsearch學習之Terms?set?查詢

    Elasticsearch學習之Terms?set?查詢

    這篇文章主要為大家介紹了Elasticsearch學習Terms?set?查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 使用Easyexcel實現(xiàn)不同場景的數(shù)據(jù)導出功能

    使用Easyexcel實現(xiàn)不同場景的數(shù)據(jù)導出功能

    這篇文章主要為大家詳細介紹了如何在不同場景下使用Easyexcel實現(xiàn)數(shù)據(jù)導出功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03

最新評論

全椒县| 无为县| 曲水县| 鄂温| 获嘉县| 台北县| 桓台县| 泸溪县| 洛扎县| 平江县| 恩施市| 沾化县| 莲花县| 阿荣旗| 花莲市| 始兴县| 扬中市| 大荔县| 鄂托克前旗| 建德市| 德兴市| 偃师市| 鄢陵县| 凤城市| 阜新市| 弋阳县| 北碚区| 广水市| 桃源县| 锦屏县| 宁陵县| 陆河县| 保山市| 阿尔山市| 肃宁县| 漯河市| 武穴市| 甘孜| 平阴县| 银川市| 宁武县|