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 String 转成Double二维数组的方法

    java String 转成Double二维数组的方法

    下面小编就为大家带来一篇java String 转成Double二维数组的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java的GUI编程之列表和组合框的设计使用

    Java的GUI编程之列表和组合框的设计使用

    这篇文章主要介绍了Java的GUI编程之列表和组合框的设计使用,是Java图形界面编程中的基础知识,需要的朋友可以参考下
    2015-10-10
  • springmvc @ResponseStatus和ResponseEntity的使用

    springmvc @ResponseStatus和ResponseEntity的使用

    这篇文章主要介绍了springmvc @ResponseStatus和ResponseEntity的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 设计模式在Spring框架中的应用汇总

    设计模式在Spring框架中的应用汇总

    这篇文章主要介绍了设计模式在Spring框架中的应用汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 如何解决shardingsphere报错Missing the data source name:‘null‘

    如何解决shardingsphere报错Missing the data source name:‘null‘

    使用ShardingSphere进行分库操作时,如果遇到“Missing the datasource name: ‘null’”的错误,通常是因为所操作的表没有配置相关的路由信息,例如,如果在properties中仅配置了health_record和health_task的路由规则
    2024-11-11
  • 详解Spring MVC优雅处理异常的6种方式

    详解Spring MVC优雅处理异常的6种方式

    在Spring中提供了多种机制来处理控制器抛出的异常,确保应用程序在面对各种错误情况时能够优雅地响应,本文我们来详细分析Spring MVC中6种优雅处理异常的方式,需要的可以参考下
    2024-12-12
  • 教你用JDK编译Java文件的方法

    教你用JDK编译Java文件的方法

    这篇文章主要介绍了教你用JDK编译Java文件的方法,分步骤给大家介绍了设置环境变量的方法,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • SpringBoot之如何指定配置文件启动

    SpringBoot之如何指定配置文件启动

    这篇文章主要介绍了SpringBoot之如何指定配置文件启动问题,具有很好的参考价值,希望对大家有所帮助。
    2023-04-04
  • Java2 JDK安装和配置教程

    Java2 JDK安装和配置教程

    这篇文章主要为大家详细介绍了Java2 JDK安装和配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Java 生成图片验证码3种方法(字母、加减乘除、中文)

    Java 生成图片验证码3种方法(字母、加减乘除、中文)

    这篇文章主要介绍了Java 生成图片验证码3种方法(字母、加减乘除、中文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论