java中array list set map对比及分析

 更新时间:2026年05月02日 14:30:16   作者:han_hanker  
本文主要讲述了Java中ArrayList、Set、Map的数据结构特性对比以及常用子类或实现类,Array有顺序,允许重复;List有顺序,允许重复;Set无序,不允许重复;Map不保持顺序,key唯一,常用子类有ArrayList、LinkedList、Vector等,HashMap、TreeMap等

java中array list set map对比

特性 / 操作Array(数组)List(列表)Set(集合)Map(映射)
是否有顺序
(Order)
✅ 有(索引顺序)✅ 有(插入顺序)❌ HashSet:无序
✅ LinkedHashSet:插入顺序
✅ TreeSet:自然/自定义排序
❌ HashMap:无序
✅ LinkedHashMap:插入顺序
✅ TreeMap:按 key 排序
是否允许重复✅ 允许✅ 允许❌ 不允许(元素唯一)❌ Key 唯一
✅ Value 可重复
❌ 长度固定,仅能赋值add(E), add(i, E)add(E)put(K, V)
❌ 无法真正删除remove(Object), remove(int)remove(Object)remove(Object key)
arr[i] = valset(int, E)❌ 需先删后加put(K, V) / replace(K, V)
arr[i]get(i), indexOf(), contains()contains()get(K), containsKey(), containsValue()
常用子类 / 实现类- 原生语法:
String[] arr = new String[5];
- 工具类:
Arrays.asList(...)(返回固定大小 List)
• ArrayList(最常用)
• LinkedList(频繁头尾操作)
• Vector(线程安全,已少用)
• CopyOnWriteArrayList(并发安全)
• HashSet(最常用,基于哈希)
• LinkedHashSet(保持插入顺序)
• TreeSet(自动排序,基于红黑树)
• HashMap(最常用)
• LinkedHashMap(保持插入顺序)
• TreeMap(key 自动排序)
• ConcurrentHashMap(高并发场景)

注意

List: 里 remove. 因为 remove 有 int 和 Object 两个重载,传入数字字面量时容易误用:

List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
nums.add(3);

// ❌ 错误:想删除值为 1 的元素,但实际删除了索引为 1 的元素!
nums.remove(1); // 调用了 remove(int index),删除了 "2"

// ✅ 正确:要删除值为 1 的元素,需显式传入 Integer 对象
nums.remove((Integer) 1);   // 或
nums.remove(Integer.valueOf(1));

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JAVA 8 ''::'' 关键字详解

    JAVA 8 ''::'' 关键字详解

    这篇文章主要介绍了JAVA 8 '::' 关键字,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • spring WebSocket示例详解

    spring WebSocket示例详解

    websocket是Html5新增加特性之一,目的是浏览器与服务端建立全双工的通信方式,本篇文章主要介绍了spring WebSocket示例详解 ,有兴趣的可以了解一下。
    2017-01-01
  • Java数据结构中图的进阶详解

    Java数据结构中图的进阶详解

    在Java学习与应用中,数据结构无疑是每个人都要接触的难点,为了更好的学习数据结构这一块内容,用图来理解便是最好的方式,让我们一起来了解本篇内容图的进阶
    2022-01-01
  • Java实现添加、验证PDF数字签名的方法示例

    Java实现添加、验证PDF数字签名的方法示例

    在设置文档内容保护的方法中,除了对文档加密、添加水印外,应用数字签名也是一种有效防伪手段。本文就使用Java实现添加、验证PDF数字签名,感兴趣的可以了解一下
    2021-07-07
  • springboot整合JSR303校验功能实现代码

    springboot整合JSR303校验功能实现代码

    这篇文章主要介绍了springboot整合JSR303校验功能实现,JSR303校验方法有统一校验的需求,统一校验实现以及分组校验,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • java中的char占几个字节实例分析

    java中的char占几个字节实例分析

    这篇文章主要介绍了java中的char占几个字节实例分析的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java中的复合数据类型

    Java中的复合数据类型

    这篇文章主要介绍了Java中的复合数据类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 深入浅出理解Java Lambda表达式之四大核心函数式的用法与范例

    深入浅出理解Java Lambda表达式之四大核心函数式的用法与范例

    Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑,今天小编带你理解Lambda表达式之四大核心函数式的用法,感兴趣的朋友快来看看吧
    2021-11-11
  • java 单例模式和工厂模式实例详解

    java 单例模式和工厂模式实例详解

    这篇文章主要介绍了Java设计模式编程中的单例模式和简单工厂模式以及实例,使用设计模式编写代码有利于团队协作时程序的维护,需要的朋友可以参考下
    2017-04-04
  • 6种Java创建对象的方式总结

    6种Java创建对象的方式总结

    在Java中,创建对象可以使用多种方式,本文将详细介绍以下六种创建对象的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04

最新评论