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

Java中Map與List作用、定義、調(diào)用實戰(zhàn)詳解

 更新時間:2025年12月11日 09:16:27   作者:悅悅歐吶吶吶吶  
在Java編程語言中,數(shù)據(jù)結(jié)構(gòu)之間轉(zhuǎn)換是常見的需求,尤其是集合框架中的List、Set和Map以及數(shù)組,這篇文章主要介紹了Java中Map與List作用、定義、調(diào)用的相關(guān)資料,需要的朋友可以參考下

Map 與 List 詳解:作用、定義、調(diào)用(Java 實戰(zhàn))

Map 和 List 是 Java 集合框架(java.util)中最常用的兩個容器,核心區(qū)別是 存儲結(jié)構(gòu)和核心用途

  • List 是「有序可重復(fù)的線性集合」,適合按順序存儲、訪問數(shù)據(jù);
  • Map 是「無序唯一的鍵值對集合」,適合通過唯一 Key 快速查找 Value。

下面從 作用、定義、調(diào)用(常用 API)、實戰(zhàn)場景 四個維度逐一拆解,結(jié)合 User 類示例,讓用法更直觀。

1.List:有序可重復(fù)的 “線性容器”

2.1. 核心作用

  • 存儲 有序、可重復(fù) 的數(shù)據(jù)(類似 “排隊的隊伍”:按插入順序排列,允許重復(fù)元素);
  • 核心場景:需要按順序訪問 / 操作數(shù)據(jù)(如展示所有用戶列表、存儲批量數(shù)據(jù));
  • 查找方式:通過「索引」(0 開始)訪問,查找非首尾元素需遍歷(時間復(fù)雜度 O (n))。

2.2. 定義(創(chuàng)建)

List 是接口,不能直接實例化,需用實現(xiàn)類(常用 ArrayList、LinkedList):

實現(xiàn)類特點適用場景
ArrayList基于數(shù)組實現(xiàn),查詢快、增刪(中間)慢多查詢、少增刪(如展示用戶列表)
LinkedList基于鏈表實現(xiàn),查詢慢、增刪(中間)快少查詢、多增刪(如隊列、棧)

定義語法(以 ArrayList 為例):

import java.util.List;
import java.util.ArrayList;

// 1. 存儲基本類型包裝類(如 Long、String)
List<Long> idList = new ArrayList<>(); // 存儲用戶 ID 列表

// 2. 存儲自定義對象(如 User)
List<User> userList = new ArrayList<>(); // 存儲用戶對象列表

// 3. 初始化時添加元素(Java 9+)
List<String> nameList = List.of("張三", "李四"); // 不可修改的 List

1.3. 核心調(diào)用(常用 API)

以 List<User> 為例,結(jié)合用戶場景實戰(zhàn):

public class ListDemo {
    public static void main(String[] args) {
        // 1. 創(chuàng)建并初始化 List
        List<User> userList = new ArrayList<>();
        User zhangsan = new User(1L, "張三", 25);
        User lisi = new User(2L, "李四", 30);
        User wangwu = new User(3L, "王五", 28);

        // 2. 添加元素(add)
        userList.add(zhangsan); // 末尾添加:[張三]
        userList.add(1, lisi);  // 插入到索引 1:[張三, 李四]
        userList.add(wangwu);   // 末尾添加:[張三, 李四, 王五]

        // 3. 獲取元素(get):通過索引訪問(0 開始)
        User firstUser = userList.get(0); // 獲取第一個元素:張三
        System.out.println(firstUser.getName()); // 輸出:張三

        // 4. 修改元素(set):替換指定索引的元素
        userList.set(2, new User(3L, "王五(修改后)", 29)); // 索引 2 替換為新對象

        // 5. 刪除元素(remove):按索引或?qū)ο髣h除
        userList.remove(1); // 刪除索引 1 的元素(李四):[張三, 王五(修改后)]
        userList.remove(zhangsan); // 刪除指定對象(張三):[王五(修改后)]

        // 6. 遍歷 List(3 種常用方式)
        // 方式 1:普通 for 循環(huán)(適合需要索引的場景)
        for (int i = 0; i < userList.size(); i++) {
            User user = userList.get(i);
            System.out.println("索引 " + i + ":" + user.getName());
        }

        // 方式 2:增強 for 循環(huán)(簡潔,無需索引)
        for (User user : userList) {
            System.out.println("用戶:" + user);
        }

        // 方式 3:Java 8+ 流式遍歷(函數(shù)式編程,簡潔靈活)
        userList.forEach(user -> System.out.println("流式遍歷:" + user.getName()));

        // 7. 其他常用操作
        int size = userList.size(); // 元素個數(shù):1
        boolean contains = userList.contains(wangwu); // 是否包含王五對象?false(已修改)
        userList.clear(); // 清空所有元素:size=0
        boolean isEmpty = userList.isEmpty(); // 是否為空?true
    }
}

2.Map:無序唯一的 “鍵值對容器”

2.1. 核心作用

  • 存儲 Key-Value 鍵值對(類似 “字典”:拼音→漢字、身份證號→用戶信息);
  • 核心場景:需要通過唯一 Key 快速查找 Value(如緩存用戶、配置映射、統(tǒng)計計數(shù));
  • 查找方式:通過「Key」查找,時間復(fù)雜度接近 O (1)(HashMap),比 List 快得多;
  • 約束:Key 必須唯一(重復(fù) put 會覆蓋舊值),Value 可重復(fù)。

2.2. 定義(創(chuàng)建)

Map 是接口,需用實現(xiàn)類(常用 HashMap、LinkedHashMap、TreeMap):

實現(xiàn)類特點適用場景
HashMap基于哈希表,無序、查詢快、線程不安全絕大多數(shù)場景(如緩存用戶)
LinkedHashMap繼承 HashMap,按插入順序 / 訪問順序排序需要有序的鍵值對(如歷史記錄)
TreeMap基于紅黑樹,按 Key 自然排序需要排序的鍵值對(如按 ID 排序)

定義語法(以 HashMap 為例):

import java.util.Map;
import java.util.HashMap;

// 1. Key=基本類型包裝類,Value=基本類型/包裝類(如統(tǒng)計用戶年齡分布)
Map<Integer, Integer> ageCountMap = new HashMap<>(); // Key=年齡,Value=人數(shù)

// 2. Key=用戶 ID(Long),Value=User 對象(緩存用戶)
Map<Long, User> userMap = new HashMap<>();

// 3. Key=String,Value=List(如按性別分組用戶)
Map<String, List<User>> genderGroupMap = new HashMap<>();

2.3. 核心調(diào)用(常用 API)

以 Map<Long, User> 為例,結(jié)合用戶緩存場景實戰(zhàn):

public class MapDemo {
    public static void main(String[] args) {
        // 1. 創(chuàng)建并初始化 Map
        Map<Long, User> userMap = new HashMap<>();
        User zhangsan = new User(1L, "張三", 25);
        User lisi = new User(2L, "李四", 30);

        // 2. 添加/修改元素(put):Key 不存在則添加,存在則覆蓋
        userMap.put(zhangsan.getId(), zhangsan); // Key=1L → Value=張三
        userMap.put(lisi.getId(), lisi);         // Key=2L → Value=李四
        userMap.put(1L, new User(1L, "張三(更新)", 26)); // 覆蓋 Key=1L 的值

        // 3. 獲取元素(get):通過 Key 查找,找不到返回 null
        User findUser = userMap.get(2L);
        System.out.println(findUser.getName()); // 輸出:李四

        // 4. 安全獲取(getOrDefault):Key 不存在時返回默認(rèn)值
        User defaultUser = userMap.getOrDefault(3L, new User(0L, "默認(rèn)用戶", 0));
        System.out.println(defaultUser.getName()); // 輸出:默認(rèn)用戶

        // 5. 刪除元素(remove):通過 Key 刪除
        userMap.remove(2L); // 刪除 Key=2L 的鍵值對:僅剩 Key=1L

        // 6. 遍歷 Map(3 種常用方式)
        // 方式 1:遍歷 Key 集合(keySet)→ 適合只需要 Key 或 Value
        for (Long userId : userMap.keySet()) {
            User user = userMap.get(userId);
            System.out.println("ID:" + userId + ",姓名:" + user.getName());
        }

        // 方式 2:遍歷鍵值對(entrySet)→ 推薦(效率高,同時獲 Key/Value)
        for (Map.Entry<Long, User> entry : userMap.entrySet()) {
            Long id = entry.getKey();
            User user = entry.getValue();
            System.out.println("ID:" + id + ",年齡:" + user.getAge());
        }

        // 方式 3:Java 8+ 流式遍歷(forEach)→ 簡潔
        userMap.forEach((id, user) -> 
            System.out.println("流式遍歷:ID=" + id + ",用戶=" + user)
        );

        // 7. 其他常用操作
        int size = userMap.size(); // 鍵值對個數(shù):1
        boolean hasKey = userMap.containsKey(1L); // 是否存在 Key=1L?true
        boolean hasValue = userMap.containsValue(zhangsan); // 是否存在張三對象?false(已更新)
        userMap.clear(); // 清空所有鍵值對
        boolean isEmpty = userMap.isEmpty(); // 是否為空?true
    }
}

3.List 與 Map 核心區(qū)別對比

維度List(如 ArrayList)Map(如 HashMap)
存儲結(jié)構(gòu)線性結(jié)構(gòu)(數(shù)組 / 鏈表),按索引存儲哈希表 / 紅黑樹,按 Key-Value 存儲
核心特點有序、可重復(fù)無序(HashMap)、Key 唯一、Value 可重復(fù)
查找方式按索引(O (n) 非首尾)按 Key(O (1) HashMap)
核心用途順序存儲、批量訪問(如展示列表)快速查找、映射緩存(如按 ID 查用戶)
元素操作基于索引(add (int index, E)、get (int))基于 Key(put (K, V)、get (K))

4.實戰(zhàn):List 與 Map 搭配使用

addUser、getUserById、listAllUsers 方法,用 Map 做緩存(快速查 ID)、List 做批量返回(展示所有用戶),是典型的搭配場景:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserService {
    // Map:緩存用戶(Key=用戶 ID,快速查詢)
    private Map<Long, User> userCache = new HashMap<>();

    // 1. 添加用戶:存入 Map(自動去重,ID 重復(fù)則覆蓋)
    public boolean addUser(User user) {
        if (user == null || user.getId() == null) {
            return false;
        }
        userCache.put(user.getId(), user);
        return true;
    }

    // 2. 按 ID 查詢:Map.get(Key) 快速獲?。∣(1))
    public User getUserById(Long id) {
        return userCache.get(id);
    }

    // 3. 查詢所有用戶:Map.values() 轉(zhuǎn)成 List 返回(順序無關(guān),如需順序用 LinkedHashMap)
    public List<User> listAllUsers() {
        return new ArrayList<>(userCache.values());
    }

    // 拓展:按性別分組用戶(Map<String, List<User>>)
    public Map<String, List<User>> groupByGender() {
        Map<String, List<User>> genderMap = new HashMap<>();
        for (User user : userCache.values()) {
            String gender = user.getGender(); // 假設(shè) User 有 gender 字段
            // 不存在該性別分組,則創(chuàng)建新 List
            genderMap.computeIfAbsent(gender, k -> new ArrayList<>());
            // 加入該性別分組
            genderMap.get(gender).add(user);
        }
        return genderMap;
    }

    // 測試
    public static void main(String[] args) {
        UserService service = new UserService();
        service.addUser(new User(1L, "張三", 25, "男"));
        service.addUser(new User(2L, "李四", 30, "男"));
        service.addUser(new User(3L, "王五", 28, "女"));

        System.out.println(service.getUserById(1L).getName()); // 張三
        System.out.println(service.listAllUsers().size()); // 3

        // 按性別分組
        Map<String, List<User>> genderMap = service.groupByGender();
        System.out.println("男性用戶:" + genderMap.get("男").size()); // 2
        System.out.println("女性用戶:" + genderMap.get("女").size()); // 1
    }
}

// 補充完整的 User 類
class User {
    private Long id;
    private String name;
    private int age;
    private String gender;

    // 構(gòu)造器、getter、toString
    public User(Long id, String name, int age, String gender) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // getter 方法
    public Long getId() { return id; }
    public String getName() { return name; }
    public int getAge() { return age; }
    public String getGender() { return gender; }

    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "'}";
    }
}

總結(jié) 

到此這篇關(guān)于Java中Map與List作用、定義、調(diào)用的文章就介紹到這了,更多相關(guān)Java Map與List詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven的三種工程pom、jar、war的區(qū)別

    maven的三種工程pom、jar、war的區(qū)別

    這篇文章主要介紹了maven的三種工程pom、jar、war的區(qū)別,詳細(xì)的介紹pom、jar、war和區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • java的三種IO模型詳解(BIO、NIO、AIO)

    java的三種IO模型詳解(BIO、NIO、AIO)

    本文介紹了BIO、NIO和AIO三種不同的IO模型,分別分析了它們的工作機(jī)制、實現(xiàn)方式以及與BIO的對比,BIO是阻塞的,每個連接需要一個線程;NIO是同步非阻塞的,通過緩沖區(qū)和選擇器實現(xiàn)I/O多路復(fù)用;AIO是異步的,操作系統(tǒng)處理IO操作,完成后通知應(yīng)用程序
    2024-11-11
  • springboot 自定義屬性與加載@value示例詳解

    springboot 自定義屬性與加載@value示例詳解

    在SpringBoot框架中,自定義屬性通常通過application.properties文件配置,并使用@Value注解加載,雖然這是一種可行的方法,但存在一種更優(yōu)雅的實現(xiàn)方式,本文給大家介紹springboot 自定義屬性與加載@value的相關(guān)操作,感興趣的朋友一起看看吧
    2024-10-10
  • Java實現(xiàn)的打印螺旋矩陣算法示例

    Java實現(xiàn)的打印螺旋矩陣算法示例

    這篇文章主要介紹了Java實現(xiàn)的打印螺旋矩陣算法,結(jié)合完整實例形式詳細(xì)分析了java打印螺旋矩陣的算法原理與實現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • 解析Spring Boot 如何讓你的 bean 在其他 bean 之前完成加載

    解析Spring Boot 如何讓你的 bean 在其他 bean&n

    在 SpringBoot 中如何讓自己的某個指定的 Bean 在其他 Bean 前完成被 Spring 加載?我聽到這個問題的第一反應(yīng)是,為什么會有這樣奇怪的需求?下面小編給大家分析下Spring Boot 如何讓你的 bean 在其他 bean 之前完成加載 ,感興趣的朋友一起看看吧
    2024-01-01
  • Java Ehcache緩存框架入門級使用實例

    Java Ehcache緩存框架入門級使用實例

    這篇文章主要介紹了Java Ehcache緩存框架入門級使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • Java中Json字符串和Java對象的互轉(zhuǎn)

    Java中Json字符串和Java對象的互轉(zhuǎn)

    本文介紹了JSON作為一種輕量級的數(shù)據(jù)交換格式,廣泛應(yīng)用于前后端數(shù)據(jù)傳輸,本文就來詳細(xì)的介紹一下Java中Json字符串和Java對象的互轉(zhuǎn),感興趣的可以了解一下
    2025-12-12
  • Mybatis攔截器實現(xiàn)自定義需求

    Mybatis攔截器實現(xiàn)自定義需求

    本文主要介紹了Mybatis攔截器實現(xiàn)自定義需求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java ThreadLocal 線程安全問題解決方案

    Java ThreadLocal 線程安全問題解決方案

    這篇文章主要介紹了Java ThreadLocal 線程安全問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口

    Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口

    這篇文章主要介紹了Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評論

武宣县| 隆尧县| 牟定县| 即墨市| 辽宁省| 稻城县| 西乌| 姜堰市| 香格里拉县| 西丰县| 武乡县| 双江| 双江| 宁德市| 繁昌县| 南康市| 西丰县| 松潘县| 常德市| 香河县| 剑川县| 磴口县| 大英县| 屏南县| 筠连县| 裕民县| 霍山县| 迭部县| 汉沽区| 石城县| 彭山县| 台东县| 葫芦岛市| 云安县| 古丈县| 城步| 罗田县| 凉山| 胶州市| 青河县| 镇远县|