百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

集合(Collection)小贴士:看看这些基础集合类的区别与联想

cac55 2024-10-11 10:52 22 浏览 0 评论

最近项目上线完,闲来无事,整理了关于集合相关对比,具体详见以下几点:

1.ArrayList和Vector区别:

这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,集存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态数组,我们以后可以按位置的索引号来取出某元素,并且其中的数据是允许重复的,这是HashSet之类的集合的最大的不同之处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素。

ArrayList与Vector的区别,主要由两个方面:

① 同步性

Vector是线程安全的,也就是说它的方法之间是线程同步的,而ArrayList是线程不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好使用ArrayList,因为它不考虑线程安全问题;如果有多个线程会访问到集合,那最好使用Vector,因为不需要我们自己去考虑和编写线程安全的代码。

备注:对于Vector&ArrayList、HashTable&HashMap,要记住线程安全问题,记住Vector与HashTable是旧的,是java一诞生就提供了的,他们是线程安全的,ArrayList与HashMap是java2时才提供的,他们是线程不安全的。

②数据增长

ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来的2倍,而ArrayList的增长策略在文档中没有明确规定(从源码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始空间的大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。

总结:即Vector增长原来的一倍,ArrayList增长原来的0.5倍。

2.HashMap和HashTable区别:

HashMap是HashTable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率高于HashTable。

HashMap允许将null作为一个Entry的key或者Value,而HashTable不允许。

HashMap把HashTable的contains方法去掉了,改成containsvalue和congainsKey。因为contains方法容易让人引起误解。

HashTable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,HashTable的方法是Synchronize的,而HashMap不是,在多个线程访问HashTable时,不需要自己为它的方法实现同步,而HashMap必须为之提供外同步。

HashMap和HashTable采用的hash/rehash算法大致一样,所以性能不会有很大的差异。

HashMap与HashTable主要从三个方面讲:

①历史原因:HashTable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现;

②同步性:HashTable是线程安全的,也就是说是同步的,而HashMap是线程不安去的,不是同步的;

③值:只有HashMap可以让你将空值作为一个表的条目的key和value。

3.List、Map、Set三个接口存取元素时,各有什么特色:

首先,List和Set具有相似性,它们都是单列元素的集合,所以它们有一个共同的父接口Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意:不仅仅是相同)的对象。【假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素】

List表示有先后顺序的集合,注意不是那种按年龄、大小、价格之类的排序。当我们多次盗用add(Object)方法时,每次加入的对象就想火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int index,Obj e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象。List除了可以以Iterator接口取得所有元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。

Map与List和Set不同,它是双列的集合,其中有put方法,定义如下:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。取则可以根据key获得相应的value,即get(Object key)返回值为key所对应的value。另外,也可以获得所有的key的集合,还可以获得所有的value的集合,还可以获得key和value组合成的Map.Entry对象的集合。

List以特定次序来持有元素,可有重复元素。Set无法拥有重复元素,内部排序。Map保存key-value值,value可多值。

HashSet按照hashcode值的某种运算方式进行存储,而不是直接按hashCode值的大小进行存储。例如:”abc” –> 78,”def”–>62,”xyz”–>65在HashSet中的存储顺序不是62,65,78。

同一个对象可以在Vector中加入多次。往集合里面加元素,相当于集合里用一根绳子连接到目标对象。往HashSet中缺加不了多次。

4.List、Map和Set的区别:

List:存储单列数据的集合;List中存储的数据是有顺序的,并且允许重复。

Map:存储键和值的双列数据的集合;Map中存储的数据是没有顺序的,其键(key)是不能重复的,它的值(value)是可以有重复 。

Set:存储单列数据的集合;Set中存储的数据是没有顺序的,并且不予许重复。

5.ArrayList、Vector、LinkedList的存储性能和特性:

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度快。

LinkedList也是线程不安全的,LinkedList提供了一些方法,是的LinkedList可以被当做堆栈和队列来使用。

6.ArrayList、HashMap容量相关:

HashMap:默认容量为16,负载因子为0.75;

ArrayList:默认容量为10,负载因子为0.5;


相关推荐

高中生又来卷我们了!手搓 Android 浏览器,可高度定制+脚本支持

回想一下,你曾经的暑假,是怎么度过的?可能是无尽的娱乐时光,或者是懒洋洋的休息日。然而,对于这位Gitee上的高中生来说,他选择在这个暑假里独立开发一款Android浏览器——Vie浏览器,...

网页加载CAD图纸的两个方案对比说明(网页浏览编辑DWG)

一.说明梦想控件提供两种技术在网页中加载CAD图纸,一个是OCX技术方案,另一个是HTML5技术方案,它们各有优缺点,用户需根据实际情况进行选择,下边分别说明一下。1、ocx技术方案(1)OCX技术是...

前后端分离的开源在线考试系统调试实战

开篇在我们的教育生涯中,或多或少的都接触过在线考试系统。例如大学里最常见的各种软件考试,上机考试等,那么有没有开源的这样的系统呢?当然是有了,今天就来调试个开源的在线考试系统。本文重点是调试,因为很多...

网友:小松鼠长大了!UC浏览器推出18周年专版logo引热议

近日,互联网厂商logo更新再次引发热议。作为国内手机浏览器的代表性厂商,UC浏览器的标志性logo小松鼠悄然发生了变化,在网友中引发了关注和讨论。依照UC微博官方账号的说法,这个全新的形象是UC18...

超多案例!谷歌AI模型Nano Banana的5个实用+趣味玩法

再不用这个AI修图神器,你的同行明天就把订单抢光了。谷歌刚放出的NanoBanana,能在一张照片里把背景、姿势、衣服一次换完,脸还是那张脸。实测把地铁照改成海边大片,只用一句话,三秒出图,不用PS来...

2025年最佳Windows数据恢复软件解决方案前5名

您是否正在寻找互联网上排名前五的WindowsPC最佳数据恢复软件解决方案?其实,网上有很多工具可以恢复已删除的文件。但并非所有应用程序都值得使用。值得信赖的文件恢复工具可以帮助您快速检索丢失、删...

电脑数据恢复软件推荐:10个顶级数据恢复软件分享

在数字化的工作与生活中,电脑文件误删除的情况时有发生,这不仅会引发我们的焦虑情绪,更可能导致重要数据的丢失。不过,幸运的是,借助正确的数据恢复软件,我们仍有机会找回那些被误删的文件。10个顶级数据恢复...

更懂国内APP的开源智能体!感知定位推理中文能力全面提升

更懂国内APP的开源智能体!感知定位推理中文能力全面提升“帮我点外卖,别点到广告位。”一句话,说出了多少人对手机自动化的真实期待。浙大和美团刚扔出来的开源项目UItron,就是冲着这句吐槽来的——它真...

美光首家推出采用EUV技术的1γ DDR5 DRAM芯片

美光科技宣布已开始向部分生态系统合作伙伴和客户出货1γ(1-gamma)16GbitDDR5DRAM芯片。美光声称,它是第一个采用1-gamma(1γ)节点的公司,该节点指的是DRAM工艺技术的第...

DDR4的PCB设计及仿真_ddr pcb

以下文章来源于鼎阳硬件智库,作者王彦武DDR4关键技术和方法分析1.1DDR4与DDR3不同之处相对于DDR3,DDR4首先在外表上就有一些变化,比如DDR4将内存下部设计为中间稍微突出,边缘变...

DDR4和DDR5内存的性能差距有哪些?

DDR4和DDR5内存的性能差距主要体现在带宽、延迟、能效及未来扩展性上,以下是关键差异的总结及选择建议:1.带宽与频率DDR4:主流频率为2133MHz–3600MHz,带宽约25.6–30.2...

DDR5内存一根和两根的区别,建议收藏观看。

大家好,我是海韵,DDR5内存条,单条和双条有什么区别,如何选择,DDR5单条和双条内存在性能上存在差距,单条内存保持在64个通道,但内部升级为32乘以2,虽然出口速度相同,但内部运行略有提升,...

Kingston FURY叛逆者DDR5 RGB CUDIMM内存评测 强势突破9000MT/s!

【ZOL中关村在线原创评测】当8000MT/s从当年的液氮超频艰难达成,到如今XMP轻松开启,DDR5内存频率的极限探索似乎看不到终点。在早先,我们曾为大家带来KingstonFURY品牌的叛逆者D...

SK海力士将在年内推出1bnm 32Gb DDR5内存颗粒

IT之家4月25日消息,据韩媒NEWSIS报道,SK海力士在今日的2024年一季度财报电话会议上表示将在年内推出1bnm32GbDDR5内存颗粒。32Gb颗粒意味着消费级的...

DRAM史上最大代际倒挂继续:三星将延长DDR4生产期限至2026年

IT之家8月6日消息,韩媒TheElec今天(8月6日)发布博文,报道称三星决定延长DDR41zDRAM的生产期限至2026年,一方面在DRAM史上最大代际倒挂中进...

取消回复欢迎 发表评论: