集合(Collection)小贴士:看看这些基础集合类的区别与联想
cac55 2024-10-11 10:52 16 浏览 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;
相关推荐
- 博科矩阵新IP网络推动发展OTT服务
-
近日消息,日本电信服务提供商软银集团正在部署博科VDX交换机,为集团公司通用服务基础架构网络提供以太网矩阵,从而简化数据中心运营。这个新的基础架构将大幅度降低软银数据中心网络运营的复杂度和成本,使该公...
- 博科SDN战略落地 首款控制器Vyatta面世
-
ZDNET网络频道10月10日评论消息(文/于泽):虽然软件定义网络(SDN)近两年被炒得很热,但一直属于雷声大雨点小。各网络厂商都声称自家的交换机能够支持OpenFlow协议、实现SDN,不过就...
- 博科网络矩阵助Skilled Group“时刻在线”
-
澳大利亚最大的劳动力解决方案提供商SkilledGroup采用博科以太网和光纤通道存储区域网络(SAN)矩阵部署了一个创新的网络,从而打造了一个“时刻在线”的IT基础架构。博科矩阵实现了零停机环境以...
- 博科基于OpenDaylight推出SDN控制器Vyatta
-
ZDNET网络频道09月23日编译:博科周一宣布推出Vyatta控制器。Vyatta是博科SDN产品系列中一个新的主打产品。博科表示,Vyatta控制器是一步一步的从OpenDaylight项目中...
- 浏览器https方式访问博科FC光交显示没有匹配的加密算法套件
-
浏览器https方式访问博科FC光交显示没有匹配的加密算法套件报错的解决办法。。------------------------------------------------------------...
- 博科携手VMware推动软件定义数据中心和网络虚拟化的普及
-
2014年10月14日--博科(NASDAQ:BRCD)今天宣布,公司携手VMware,推出支持新IP的解决方案,以期让企业能够更轻松地迁移到软件定义数据中心(SDDC)和使用网络虚拟化。博科公司...
- 博科公司为追求速度极致的闪存拥趸提供光纤通道交换机
-
博科公司已经发布了一款每秒32Gbit第六代光纤通道交换机,这意味着其能够将现有每秒16Gbit连接速度提升一倍。其G620交换机采用1U机箱,提供24到64个端口,据博科方面所言这已经达到当前业...
- 博科推出第6代交换机 扩大光纤存储地位
-
博科今天宣布推出业内第一台第6代光纤通道存储网络交换机——博科G620,进一步扩大了博科在光纤通道技术领域的地位。这一全新专用且高密度SAN交换机提供突破性的性能和高可扩展性,旨在支持来自核心应用的数...
- 微信官宣新功能上线,聊天记录备份、迁移更好用了!
-
说到手机里哪个App最占空间,很多用户的答案大概都是微信,动辄占用几十甚至上百GB。不仅App本身体积庞大,更主要的是日积月累的聊天记录导致了空间的迅速消耗。此前,释放微信空间的常用方法是将...
- 局域网沟通工具--BeeBEEP(局域网内部聊天工具)
-
原文链接:局域网沟通工具--BeeBEEPHello,大家好啊!今天给大家带来一篇关于在信创终端上使用BeeBEEP的文章。BeeBEEP是一款安全、便捷的局域网即时通讯工具,支持文字聊天、文...
- 企业 IM 即时通讯底座,支持局域网通讯
-
在数字化浪潮下,企业对即时通讯的需求日益增长,尤其是对通讯安全性、可控性的要求愈发严苛。BeeWorks作为专业的企业IM即时通讯底座,凭借对局域网通讯的支持,为企业打造了优质可控的即时通讯与实...
- IM即时通讯软件,构建企业局域网内安全协作
-
安全与权限:协同办公的企业级保障在协同办公场景中,BeeWorks将安全机制贯穿全流程。文件在局域网内传输与存储时均采用加密处理,企业网盘支持水印预览、离线文档权限回收等功能,防止敏感资料外泄;多人...
- 当今信息化时代都离不开WLAN, 今天给大家普及一下WLAN知识
-
无线局域网(WirelessLocalAreaNetworks/WLAN)一.无线让网络使用更自由:1.凡是自由空间均可连接网络,不受限于线缆和端口位置。二.无线让网络建设更经济:1.终端...
- 软网推荐:寻找WebQQ替代者 在线可以继续聊
-
不少公司禁止上班聊天,常常采取封禁QQ、关闭端口等方法,导致很多聊天软件无法使用。以前我们可以通过WebQQ绕开限制,不过WebQQ在2019年1月1日开始停止服务,想要继续隐蔽聊天,就只能找其他一些...
- 搭建自己的聊天室平台、公司内部聊天平台,Rocket.Chat搭建使用
-
一,简介rocket.chat是一个开源的社交软件,即可以直接在web页面使用,也可以下载APP(Android,IOS,Windows,MacOS)主要功能:群组聊天,直接通信,私聊群,桌面通知...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)