区别是什么

他们的底层实现不同,ArrayList和Map的底层实现是数组,Set的底层实现是Map,
Map是要存放两个值,key和value,key不能重复,而Set的实现是存放Map的key,所以Set的值也不能重复,Map,和Set无序且不可重复,ArrayList有序可重复

如果ArrayList 和Map存储的元素都比较多。那么在取元素方面,ArrayList要慢很多。
但是这也不是绝对的,因为ArrayList底层基于数组,如果你明确的知道你要取的元素在哪个下标上,那么ArrayList也是相当的快。但是如果你不清楚,只能通过迭代内部全部元素然后进行条件判断查找,那么ArrayList就要慢的多,因为他要从头到尾一个个的元素去查,直到找到满足你的要求的那个元素,而Map则不需要迭代,因为Map有键,直接取键对应的值。

对于添加元素,ArrayList是在数组的结尾追加,当容量不够时,创建一个新的更长的数组然后将旧的全部拷贝过来。Map和他的方式差不多,也是容量不足的时候需要重新创建新(等于自身一般的内存)的然后拷贝,但是当发生删除元素时,ArrayList简直就是灾难。假设你有10000个元素,你删除首个元素,在删除完毕以后 ArrayList中的所有元素都必须进行一次移动操作,向前位移。。。而Map则不需要。

大概就是这样,如果你考虑一个长度比较可预测的保存元素的集合,并且很少有删除操作,大部分是进行全部迭代的操作,那么用ArrayList会比较合适。
如果你的List还要经常增删,那么用LinkedList比较合适。
如果你要快速查找,取值,用HashMap比较合适。
如果同时要保证,元素放进去的顺序和取出来的顺序一致用LinkedHashMap。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值