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

Java集合(含List、Map、Set和Queue)超詳細(xì)講解

 更新時(shí)間:2025年10月27日 15:16:29   作者:一成在成長(zhǎng)  
Java 集合框架是Java編程中最基礎(chǔ)、最常用的部分之一,它為我們提供了一整套標(biāo)準(zhǔn)化的數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn),包括 List、Set、Queue、Map 等,用于高效地存儲(chǔ)、訪問(wèn)和操作對(duì)象集合,本文介紹Java集合(含List、Map、Set和Queue)的相關(guān)知識(shí),感興趣的朋友一起看看吧

Java 集合框架全解析

Java 集合框架是 Java 編程中最基礎(chǔ)、最常用的部分之一。它為我們提供了一整套標(biāo)準(zhǔn)化的數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn),包括 List、Set、Queue、Map 等,用于高效地存儲(chǔ)、訪問(wèn)和操作對(duì)象集合。

集合框架的整體結(jié)構(gòu)

Java 集合大體分為兩條主線:

Collection(單值集合)
│
├── List(有序,可重復(fù))
│     ├── ArrayList
│     ├── LinkedList
│     └── Vector / Stack
│
├── Set(無(wú)序,不可重復(fù))
│     ├── HashSet
│     ├── LinkedHashSet
│     └── TreeSet
│
└── Queue(隊(duì)列)
      ├── ArrayDeque
      ├── LinkedList
      └── PriorityQueue
Map(鍵值對(duì)集合)
├── HashMap
├── LinkedHashMap
└── TreeMap

List:有序可重復(fù)的集合

ArrayList ( 動(dòng)態(tài)數(shù)組)

ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
  • 底層是 動(dòng)態(tài)數(shù)組;
  • 支持隨機(jī)訪問(wèn)(時(shí)間復(fù)雜度 O(1));
  • 中間插入、刪除代價(jià)高(涉及數(shù)組移動(dòng));
  • 自動(dòng)擴(kuò)容(通常 1.5 倍)。
import java.util.ArrayList;
import java.util.Collections;
public class Main {
    public static void main(String[] args) {
        int n = 10;
        // 初始化 ArrayList,大小為 10,元素值都為 0
        ArrayList<Integer> nums = new ArrayList<>(Collections.nCopies(n, 0));
        // 輸出:false
        System.out.println(nums.isEmpty());
        // 輸出:10
        System.out.println(nums.size());
        // 在數(shù)組尾部插入一個(gè)元素 20
        nums.add(20);
        // 輸出:11
        System.out.println(nums.size());
        // 得到數(shù)組最后一個(gè)元素
        // 輸出:20
        System.out.println(nums.get(nums.size() - 1));
        // 刪除數(shù)組的最后一個(gè)元素
        nums.remove(nums.size() - 1);
        // 輸出:10
        System.out.println(nums.size());
        // 可以通過(guò)索引直接取值或修改
        nums.set(0, 11);
        // 輸出:11
        System.out.println(nums.get(0));
        // 在索引 3 處插入一個(gè)元素 99
        nums.add(3, 99);
        // 刪除索引 2 處的元素
        nums.remove(2);
        // 交換 nums[0] 和 nums[1]
        Collections.swap(nums, 0, 1);
        // 遍歷數(shù)組
        // 輸出:0 11 99 0 0 0 0 0 0 0
        for(int num : nums) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}

適用于 查找頻繁、插入較少 的場(chǎng)景。

LinkedList ( 雙向鏈表)

LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");

特征:

  • 底層是 雙向鏈表;
  • 不支持隨機(jī)訪問(wèn)(時(shí)間復(fù)雜度 O(n));
  • 任意位置插入、刪除高效;
  • 每個(gè)節(jié)點(diǎn)多存前后指針,內(nèi)存開(kāi)銷更大。

適用于 插入、刪除頻繁 的場(chǎng)景。

import java.util.Arrays;
import java.util.LinkedList;
public class Main {
    public static void main(String[] args) {
        // 初始化鏈表
        LinkedList<Integer> lst = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
        // 檢查鏈表是否為空,輸出:false
        System.out.println(lst.isEmpty());
        // 獲取鏈表的大小,輸出:5
        System.out.println(lst.size());
        // 在鏈表頭部插入元素 0
        lst.addFirst(0);
        // 在鏈表尾部插入元素 6
        lst.addLast(6);
        // 獲取鏈表頭部和尾部元素,輸出:0 6
        System.out.println(lst.getFirst() + " " + lst.getLast());
        // 刪除鏈表頭部元素
        lst.removeFirst();
        // 刪除鏈表尾部元素
        lst.removeLast();
        // 在鏈表中插入元素
        // 移動(dòng)到第三個(gè)位置
        lst.add(2, 99);
        // 刪除鏈表中某個(gè)元素
        lst.remove(1);
        // 遍歷鏈表
        // 輸出:1 99 3 4 5
        for(int val : lst) {
            System.out.print(val + " ");
        }
        System.out.println();
    }
}

Vector & Stack(歷史遺留)

  • Vector 是線程安全的 ArrayList;
  • 每個(gè)方法都加了 synchronized,性能較低;
  • 已被 ArrayList 替代;
  • Stack 繼承自 Vector,實(shí)現(xiàn) LIFO(后進(jìn)先出) 棧結(jié)構(gòu);
  • 推薦使用 ArrayDeque 替代。

Set:無(wú)序且元素唯一

HashSet ( 基于 HashMap)

HashSet<String> set = new HashSet<>();
set.add("一");
set.add("二");
set.add("三");
  • 底層由 HashMap 實(shí)現(xiàn);
  • 元素作為 key,value 為固定對(duì)象;
  • 自動(dòng)去重;
  • 不保證順序。

適用于 去重、快速查找。

import java.util.Arrays;
import java.util.HashSet;
public class Main {
    public static void main(String[] args) {
        // 初始化哈希集合
        HashSet<Integer> hashset = new HashSet<>(Arrays.asList(1, 2, 3, 4));
        // 檢查哈希集合是否為空,輸出:false
        System.out.println(hashset.isEmpty());
        // 獲取哈希集合的大小,輸出:4
        System.out.println(hashset.size());
        // 查找指定元素是否存在
        // 輸出:Element 3 found.
        if(hashset.contains(3)) {
            System.out.println("Element 3 found.");
        } else {
            System.out.println("Element 3 not found.");
        }
        // 插入一個(gè)新的元素
        hashset.add(5);
        // 刪除一個(gè)元素
        hashset.remove(2);
        // 輸出:Element 2 not found.
        if(hashset.contains(2)) {
            System.out.println("Element 2 found.");
        } else {
            System.out.println("Element 2 not found.");
        }
        // 遍歷哈希集合
        // 輸出(順序可能不同):
        // 1
        // 3
        // 4
        // 5
        for(int element : hashset) {
            System.out.println(element);
        }
    }
}

LinkedHashSet (有序 HashSet)

LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("一");
set.add("二");
set.add("三");
  • 繼承 HashSet
  • 底層由 LinkedHashMap 實(shí)現(xiàn);
  • 保持插入順序;
  • 查找性能與 HashSet 相近。

適用于 既想去重又保留插入順序 的場(chǎng)景。

TreeSet ( 有序去重集合)

TreeSet<String> set = new TreeSet<>();
set.add("一");
set.add("二");
set.add("三");
  • 基于 紅黑樹 實(shí)現(xiàn);
  • 元素自動(dòng)排序;
  • 不允許 null;
  • 可自定義排序規(guī)則(Comparator)。

適用于 需要自動(dòng)排序 的場(chǎng)景。

Queue:隊(duì)列

ArrayDeque ( 高效雙端隊(duì)列)

ArrayDeque<String> deque = new ArrayDeque<>();
deque.add("一");
deque.add("二");
deque.add("三");
  • 基于循環(huán)數(shù)組;
  • 可在兩端插入/刪除;
  • 性能優(yōu)于 LinkedList;
  • 替代 StackQueue。

LinkedList (可作隊(duì)列使用)

LinkedList<String> queue = new LinkedList<>();
queue.offer("一成");
queue.poll();
  • 同時(shí)實(shí)現(xiàn)了 ListDeque;
  • 適合頻繁插入刪除;
  • 支持隊(duì)首、隊(duì)尾操作;
  • 內(nèi)存占用高于 ArrayDeque。

PriorityQueue — 優(yōu)先級(jí)隊(duì)列

PriorityQueue<Student> queue = new PriorityQueue<>(new StudentComparator());
  • 底層是 堆結(jié)構(gòu);
  • 出隊(duì)順序由優(yōu)先級(jí)決定;
  • 元素需實(shí)現(xiàn) Comparable 或傳入 Comparator。

適用于 任務(wù)調(diào)度、最小/最大堆 場(chǎng)景。

import java.util.Queue;
import java.util.LinkedList;
public class Main {
    public static void main(String[] args) {
        // 初始化一個(gè)空的整型隊(duì)列 q
        Queue<Integer> q = new LinkedList<>();
        // 在隊(duì)尾添加元素
        q.offer(10);
        q.offer(20);
        q.offer(30);
        // 檢查隊(duì)列是否為空,輸出:false
        System.out.println(q.isEmpty());
        // 獲取隊(duì)列的大小,輸出:3
        System.out.println(q.size());
        // 獲取隊(duì)列的隊(duì)頭元素
        // 輸出:10
        System.out.println(q.peek());
        // 刪除隊(duì)頭元素
        q.poll();
        // 輸出新的隊(duì)頭元素:20
        System.out.println(q.peek());
    }
}

Map:鍵值對(duì)集合

HashMap (哈希表實(shí)現(xiàn))

HashMap<String, String> map = new HashMap<>();
map.put("一成", "yicheng");
map.put("在成長(zhǎng)", "zaichengzhang");
  • 鍵唯一,值可重復(fù);
  • 查找/插入效率高;
  • 默認(rèn)容量 16,負(fù)載因子 0.75;
  • 可存 null 鍵與 null 值;
  • 無(wú)序。
import java.util.HashMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        // 初始化哈希表
        HashMap<Integer, String> hashmap = new HashMap<>();
        hashmap.put(1, "one");
        hashmap.put(2, "two");
        hashmap.put(3, "three");
        // 檢查哈希表是否為空,輸出:false
        System.out.println(hashmap.isEmpty());
        // 獲取哈希表的大小,輸出:3
        System.out.println(hashmap.size());
        // 查找指定鍵值是否存在
        // 輸出:Key 2 -> two
        if(hashmap.containsKey(2)) {
            System.out.println("Key 2 -> " + hashmap.get(2));
        } else {
            System.out.println("Key 2 not found.");
        }
        // 獲取指定鍵對(duì)應(yīng)的值,若不存在會(huì)返回 null
        // 輸出:null
        System.out.println(hashmap.get(4));
        // 獲取指定鍵對(duì)應(yīng)的值,若不存在則返回默認(rèn)值
        // 輸出:defaultVal
        System.out.println(hashmap.getOrDefault(4, "defaultVal"));
        // 插入一個(gè)新的鍵值對(duì)
        hashmap.put(4, "four");
        // 獲取新插入的值,輸出:four
        System.out.println(hashmap.get(4));
        // 刪除鍵值對(duì)
        hashmap.remove(3);
        // 檢查刪除后鍵 3 是否存在
        // 輸出:Key 3 not found.
        if(hashmap.containsKey(3)) {
            System.out.println("Key 3 -> " + hashmap.get(3));
        } else {
            System.out.println("Key 3 not found.");
        }
        // 遍歷哈希表
        // 輸出(順序可能不同):
        // 1 -> one
        // 2 -> two
        // 4 -> four
        for(Map.Entry<Integer, String> pair : hashmap.entrySet()) {
            System.out.println(pair.getKey() + " -> " + pair.getValue());
        }
    }
}

LinkedHashMap (有序 HashMap)

LinkedHashMap<String, String> linkedMap = new LinkedHashMap<>();
linkedMap.put("一成", "yicheng");
linkedMap.put("在成長(zhǎng)", "zaichengzhang");
  • 保留插入順序;
  • 可設(shè)置訪問(wèn)順序;
  • 常用于實(shí)現(xiàn) LRU 緩存。

TreeMap ( 紅黑樹實(shí)現(xiàn))

TreeMap<String, String> treeMap = new TreeMap<>();
treeMap.put("a", "apple");
treeMap.put("b", "banana");
treeMap.put("c", "cat");
  • 鍵有序;
  • 基于紅黑樹;
  • 查找、插入、刪除為 O(log n)。

適用于 需要有序 Map 的場(chǎng)景。

需求推薦集合說(shuō)明
有序且可重復(fù)ArrayList動(dòng)態(tài)數(shù)組,隨機(jī)訪問(wèn)快
插入刪除多LinkedList鏈表結(jié)構(gòu),插入刪除快
去重但無(wú)序HashSet由 HashMap 實(shí)現(xiàn)
去重且有序LinkedHashSet保留插入順序
自動(dòng)排序TreeSet / TreeMap基于紅黑樹
雙端隊(duì)列ArrayDeque替代 Stack/Queue
按優(yōu)先級(jí)取出PriorityQueue堆結(jié)構(gòu)
鍵值映射HashMap最常用的 Map
有序 MapLinkedHashMap / TreeMap插入或自然順序
Java 集合框架
│
├── Collection
│   ├── List → ArrayList / LinkedList / Vector / Stack
│   ├── Set → HashSet / LinkedHashSet / TreeSet
│   └── Queue → ArrayDeque / LinkedList / PriorityQueue
│
└── Map
    ├── HashMap
    ├── LinkedHashMap
    └── TreeMap

到此這篇關(guān)于Java集合(含List、Map、Set和Queue)超詳細(xì)講解的文章就介紹到這了,更多相關(guān)java list map set queue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java持久層框架MyBatis簡(jiǎn)單實(shí)例

    Java持久層框架MyBatis簡(jiǎn)單實(shí)例

    MyBatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。本文重點(diǎn)給大家介紹Java持久層框架MyBatis簡(jiǎn)單實(shí)例,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-07-07
  • 基于JavaSwing+mysql開(kāi)發(fā)一個(gè)學(xué)生社團(tuán)管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于JavaSwing+mysql開(kāi)發(fā)一個(gè)學(xué)生社團(tuán)管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    項(xiàng)目使用Java swing+mysql開(kāi)發(fā),可實(shí)現(xiàn)基礎(chǔ)數(shù)據(jù)維護(hù)、用戶登錄注冊(cè)、社團(tuán)信息列表查看、社團(tuán)信息添加、社團(tuán)信息修改、社團(tuán)信息刪除以及退出注銷等功能、界面設(shè)計(jì)比較簡(jiǎn)單易學(xué)、適合作為Java課設(shè)設(shè)計(jì)以及學(xué)習(xí)技術(shù)使用,需要的朋友參考下吧
    2021-08-08
  • 簡(jiǎn)單總結(jié)Java IO中stream流的使用方法

    簡(jiǎn)單總結(jié)Java IO中stream流的使用方法

    這篇文章主要介紹了Java IO中stream流的使用方法的簡(jiǎn)單總結(jié),包括數(shù)據(jù)流和打印流等Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-03-03
  • Java簽名加密與驗(yàn)證實(shí)現(xiàn)過(guò)程

    Java簽名加密與驗(yàn)證實(shí)現(xiàn)過(guò)程

    本文詳細(xì)介紹了Java中簽名加密驗(yàn)證簽名和SHA1withRSAUtil證書簽名算法的實(shí)現(xiàn)原理及流程,通過(guò)描述數(shù)據(jù)準(zhǔn)備、哈希計(jì)算、簽名生成、數(shù)據(jù)封裝、數(shù)據(jù)傳輸和服務(wù)器驗(yàn)證的完整過(guò)程,展示了如何在Java中確保數(shù)據(jù)傳輸?shù)陌踩院万?yàn)證
    2025-10-10
  • SpringBoot預(yù)加載與懶加載實(shí)現(xiàn)方法超詳細(xì)講解

    SpringBoot預(yù)加載與懶加載實(shí)現(xiàn)方法超詳細(xì)講解

    Spring一直被詬病啟動(dòng)時(shí)間慢,可Spring/SpringBoot是輕量級(jí)的框架。因?yàn)楫?dāng)Spring項(xiàng)目越來(lái)越大的時(shí)候,在啟動(dòng)時(shí)加載和初始化Bean就會(huì)變得越來(lái)越慢,很多時(shí)候我們?cè)趩?dòng)時(shí)并不需要加載全部的Bean,在調(diào)用時(shí)再加載就行,那這就需要預(yù)加載與懶加載的功能了
    2022-11-11
  • java實(shí)現(xiàn)LRU緩存淘汰算法的方法

    java實(shí)現(xiàn)LRU緩存淘汰算法的方法

    LRU(Least recently used,最近最少使用)算法根據(jù)數(shù)據(jù)的歷史訪問(wèn)記錄來(lái)進(jìn)行淘汰數(shù)據(jù),其核心思想是“如果數(shù)據(jù)最近被訪問(wèn)過(guò),那么將來(lái)被訪問(wèn)的幾率也更高”。下面看下java實(shí)現(xiàn)LRU緩存淘汰算法的方法,一起看看吧
    2021-11-11
  • SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析

    SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析

    這篇文章主要介紹了SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析,spring默認(rèn)使用JDK動(dòng)態(tài)代理實(shí)現(xiàn)AOP,類如果實(shí)現(xiàn)了接口,spring就會(huì)用JDK動(dòng)態(tài)代理實(shí)現(xiàn)AOP,如果目標(biāo)類沒(méi)有實(shí)現(xiàn)接口,spring則使用Cglib動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)AOP,需要的朋友可以參考下
    2024-01-01
  • Java線程休眠_(dá)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java線程休眠_(dá)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    sleep() 的作用是讓當(dāng)前線程休眠,即當(dāng)前線程會(huì)從“運(yùn)行狀態(tài)”進(jìn)入到“休眠(阻塞)狀態(tài)”。下面通過(guò)實(shí)例代碼給大家介紹Java線程休眠的知識(shí),需要的朋友參考下吧
    2017-05-05
  • SpringBoot實(shí)現(xiàn)在webapp下直接訪問(wèn)html,jsp

    SpringBoot實(shí)現(xiàn)在webapp下直接訪問(wèn)html,jsp

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)在webapp下直接訪問(wèn)html,jsp問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • spring?Cloud微服務(wù)阿里開(kāi)源TTL身份信息的線程間復(fù)用

    spring?Cloud微服務(wù)阿里開(kāi)源TTL身份信息的線程間復(fù)用

    這篇文章主要為大家介紹了spring?Cloud微服務(wù)中使用阿里開(kāi)源TTL身份信息的線程間復(fù)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論

灵山县| 连山| 鹤峰县| 息烽县| 石嘴山市| 奈曼旗| 平舆县| 类乌齐县| 喜德县| 潞城市| 正蓝旗| 石嘴山市| 乌兰察布市| 凌海市| 昌江| 思茅市| 沂南县| 枝江市| 荣昌县| 祥云县| 宁海县| 长春市| 都匀市| 蛟河市| 四川省| 密山市| 绿春县| 海宁市| 蓬安县| 兴隆县| 长泰县| 鄯善县| 正蓝旗| 清丰县| 新余市| 延吉市| 六枝特区| 东港市| 滕州市| 西丰县| 三明市|