List、Set、Map 的核心区别与使用场景,你还不懂吗?

举报
喵手 发表于 2025/04/29 10:35:28 2025/04/29
【摘要】 开篇语哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,...

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在开发过程中,ListSetMap 是三种常见的数据结构。它们看起来都能存储一堆数据,但每种数据结构的特性、用法和适用场景却大不相同。对于全栈开发者而言,理解它们的差异就像了解不同的工具,每个工具有自己的用途,选对了才能让你事半功倍。

今天我们就来深度解析一下它们的核心区别、特性和最佳使用场景。准备好了吗?Let’s go!

1. List(列表)

1.1 List 的定义

List 是一个有序的集合,可以包含重复的元素。它不仅能存储元素,还能按索引进行访问,支持元素的插入和删除。

  • 有序:元素按照插入的顺序排列,索引从 0 开始。
  • 允许重复:可以存储重复元素。
  • 随机访问:支持通过索引来访问元素。

1.2 典型实现

在 Java 中,ArrayListLinkedList 都实现了 List 接口。

1.3 典型使用场景

  • 需要保持顺序:你需要按插入顺序访问元素。
  • 访问效率要求高:当需要随机访问集合中的元素时,ArrayList 是一个不错的选择(LinkedList 则适合插入和删除操作频繁的场景)。

使用示例:Java 中的 List 示例

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

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Apple"); // 允许重复元素

        for (String fruit : list) {
            System.out.println(fruit);
        }
    }
}

输出:

Apple
Banana
Apple

2. Set(集合)

2.1 Set 的定义

Set 是一个不允许重复元素的集合,也就是说,它会自动去除重复的元素。同时,它是无序的,即不能通过索引来访问元素。

  • 无序:元素没有固定顺序,不支持通过索引访问。
  • 不允许重复:如果试图添加重复元素,集合会自动去重。

2.2 典型实现

在 Java 中,HashSetTreeSet 是常见的 Set 实现。

2.3 典型使用场景

  • 去重需求:当你只关心某个元素是否存在而不关心顺序时,Set 是最理想的选择。
  • 数据去重:如果你有一个数据列表,想去除重复的元素,可以用 Set 来去重。

使用示例:Java 中的 Set 示例

import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // 由于Set不允许重复,"Apple"不会被添加两次

        for (String fruit : set) {
            System.out.println(fruit);
        }
    }
}

输出:

Apple
Banana

3. Map(映射)

3.1 Map 的定义

Map 是一个键值对集合,每个元素由(key)和值(value)组成。键是唯一的,而值可以重复。

  • 键唯一:每个键只能出现一次,但多个键可以映射到同一个值。
  • 通过键访问值:可以通过键来快速获取对应的值。

3.2 典型实现

在 Java 中,HashMapTreeMap 是常见的 Map 实现。

3.3 典型使用场景

  • 需要通过键查找值:当你有一个映射关系,比如学生ID与姓名的映射,可以使用 Map
  • 快速查找Map 提供了根据键来快速查找值的能力,特别是当你需要高效的插入、删除、查找时,HashMap 非常适合。

使用示例:Java 中的 Map 示例

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

public class MapExample {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "Apple");
        map.put(2, "Banana");
        map.put(3, "Cherry");

        // 根据key获取value
        System.out.println(map.get(2)); // 输出 "Banana"
    }
}

输出:

Banana

4. 核心区别总结

特性 List Set Map
元素顺序 有序,可以通过索引访问 无序,不支持索引访问 无序,基于键-值对存储
重复元素 允许重复 不允许重复 允许重复值,不允许重复键
访问方式 通过索引访问元素 通过迭代器访问元素 通过键访问对应的值
适用场景 需要按顺序访问元素、需要重复 需要去重、不关心元素顺序 需要通过键值对存储并快速查找

5. 选择适合的数据结构

  • 选择 List:当你需要保持元素的顺序,并且有可能存储重复数据时,使用 List
  • 选择 Set:当你需要去重且不关心元素的顺序时,使用 Set
  • 选择 Map:当你需要通过某个唯一的键来查找对应的值时,使用 Map,比如存储用户信息时,使用用户的唯一标识(如用户ID)作为键。

6. 总结

不同的数据结构有不同的适用场景,你不需要每次都去头疼选择用哪个,只需要根据实际需求,选对工具,你就能高效地解决问题。理解 List、Set 和 Map 的核心差异,你就能在开发中得心应手,做到“信手拈来”。

记住,有了对数据结构的清晰理解,写代码就能像打游戏一样,灵活切换不同的战斗模式!

7. 延伸阅读

如果你想了解更多的数据结构和算法,或者想学会如何高效选择数据结构来解决实际问题,可以继续关注我后续的系列文章。我将深入分析不同数据结构的内部实现,带你从基础到进阶,打下坚实的算法基础!

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。