Java常见集合类区别

news/2025/1/11 2:13:19/

Java常见集合类区别

  • 1. List和Map区别
    • 1.1 深入阐述
  • 2. ArrayList和Vector的区别
    • 2.1 具体区别
  • 3. ArrayList, Vector, LinkedList的存储性能和特性
  • 4. HashMap和Hashtable的区别
    • 4.1 两者区别总结

1. List和Map区别

List:存放单个元素的集合
List集合所包含的元素可以重复,元素按放入的先后顺序来存放。
程序 -> 元素的索引 -> 读取元素
List相当于一个动态数组

Map:存放key-value对的集合
key-value对是无序
key 不允许重复
程序可以根据key来取出该key对应的value

1.1 深入阐述

可以把List当作Map来看

List相当于一个key都是int类型的Map

程序通过元素的索引(相当于通过int类型的key)来读取List集合的元素时,可以当作Map根据key来读取value。

Map也可以当成是元素索引可以是任意类型的List集合

2. ArrayList和Vector的区别

这两个类都实现了List接口,List接口继承了Collection接口。

他们都是有序集合。

存储的元素位置都是有顺序的,相当于动态的数组。

可以按照位置索引来取出某个元素。

并且其中的数据是允许重复的,这是由List集合规范制订的。

ArrayList和Vector的底层都是基于数组的。因此他们的实现代码也大致相似。

2.1 具体区别

  1. Vector是一个古老的集合,从JDK1.0开始便有了,因此它包含了大量方法名很长的方法。
  2. JDK 1.2开始引入集合框架、引入List接口,还让Vector实现了List接口。因此增加了一些List接口中定义的方法。

总体来说,ArrayList可以完全代替Vector,除了在一些很古老的API中强制要求使用Vector之外。

Vector还有一个特征,它是线程安全的,因此性能比较差

ArrayList线程不安全的,因此性能较好

即使在多线程环境下使用List集合,也应该选用ArrayList而不是Vector。因为Java还提供了一个Collections工具类它可以把ArrayList包装成线程安全的集合类,例如如下代码:

List list = Collections.synchronizedList(new ArrayList());

3. ArrayList, Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式储存数据的。

数组元素的数据大于实际储存的数据以便增加和插入元素。

它们都允许直接按序号索引元素。但是插入元素需要涉及数组元素移动等内存操作。所以索引数据快,插入数据慢。

Vector由于使用了synchronized方法,因此是线程安全的。性能上较ArrayList差。

LinkedList使用双向链表来实现储存。序号索引数据需要进行前向或后向遍历。插入数据时,记录本项的前后项即可。所以插入速度较快。

LinkedList也是线程不安全的。LinkedList提供了一些方法使得其可以当作栈和队列进行使用。实际上Java提供了Collections工具类,它可以把ArrayList和LinkedList包装成线程安全的集合。

因此实际编程中应该避免使用vector。

4. HashMap和Hashtable的区别

HashMap与Hashtable的区别类似于ArrayList与Vector的区别

Hashtable与Vector都是JDKl.0就有的一个古老的集合。
Hashtable是一个继承自Dictionary的古老集合。

从JDK1.2引入了集合框架的Map接口后,Java用Hashtable也实现了Map接口。Hashtable也新增实现了一些Map接口中定义的方法。

实际上Hashtable和HashMap的底层的实现很相似。他们都是基于Hash表的实现

4.1 两者区别总结

  1. HashMap允许使用null作为key或value,而Hashtable不允许
  2. HashMap线程不安全的,因此性能较好;但Hashtable线程安全的,因此性能较差。

实际上,在多线程环境下,Java的Collections工具类将HashMap包装成线程安全的类。因此依然应该使用HashMap。

Map map = Collections.synchronizedMap(new HashMap());

编程时应该尽量避免使用Hashtable

除非在一个古老的API中强制要求使用Hashtable

参考资料:4分钟理清Java常见集合类区别,看完80%的同学都涨薪了


http://www.ppmy.cn/news/47194.html

相关文章

世界大学机械工程TOP10,国内大学哪家强?

就在前不久世界大学的排名已经发布,机械工程学科是工科类学科当中代表学科之一,相信很多小伙伴是非常想要了解的。那么,我给大家介绍一下2023年QS世界大学(机械工程)学科排名。 本次排名比较分析了包括世界93个地区的…

【CSS】使用绝对定位 / 浮动解决外边距塌陷问题 ( 为父容器 / 子元素设置内边距 / 边框 | 为子元素设置浮动 | 为子元素设置绝对定位 )

文章目录 一、外边距塌陷描述1、没有塌陷的情况2、外边距塌陷情况 二、传统方法解决外边距塌陷 - 为父容器 / 子元素设置内边距 / 边框三、使用浮动解决外边距塌陷 - 为子元素设置浮动四、使用绝对定位解决外边距塌陷 - 为子元素设置绝对定位 一、外边距塌陷描述 在 标准流的父…

Docker容器数据卷详解

文章目录 一、数据卷使用二、数据卷容器三、数据卷备份与恢复 数据卷特点: 数据卷会一直在,即使容器销毁可以对数据卷内容直接修改 一、数据卷使用 1、为容器添加数据卷 docker run -itd --name nginx -v /data:/usr/share/nginx/html qinzt/nginx:v1…

如何计算连续变量的熵

背景 做特征选择时,有时候会用到计算特征的信息熵,可是离散的好计算,但连续的呢?按照把连续变量离散的方法设置阈值点吗?好像比较麻烦,需要排序, 计算阈值。没有能自动的方法吗? 找…

聚观早报 |字节与Meta争夺VR开发者;苹果设备无故要求输入ID密码

今日要闻:字节与Meta争夺VR应用开发者;苹果设备无故要求输入ID密码;余承东称25年是智能电动汽车分水岭;小鹏回应G6售价及配置信息曝光;亚马逊将在爱尔兰裁员200人 字节与Meta争夺VR应用开发者 4 月 14 日消息&#xf…

氧气与肠道菌群失调

谷禾健康 健康的肠道微生物群特点是氧气含量低,并且存在大型专性厌氧菌细菌群落,这些共生菌通过限制肠道病原体的扩张为宿主提供益处。 那么是什么导致肠道健康走下坡路,是什么原因引起肠道菌群失调,在科学界一直有2种观点&#x…

初始Sentinel

目录 雪崩问题及解决方案 服务保护技术对比 Sentinel介绍和安装 微服务整合Sentinel 雪崩问题及解决方案 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。 解决雪崩问题的常见方式有四种: 超时处理&…

低代码开发重要工具:私有化部署的jvs-logic的设计与价值

逻辑引擎介绍 逻辑引擎是一种能够处理逻辑表达式的程序,它能够根据用户输入的表达式计算出表达式的值。在实际应用中,逻辑引擎通常被用于处理规则引擎、决策系统、业务规则配置等领域,具有广泛的应用前景。 逻辑引擎如下图所示,在…