赞
踩
1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
是否有序 | 是否允许重复 | ||
---|---|---|---|
Collection | |||
List | Y | Y | |
Set | AbstractSet | No | NO |
HashSet | No | NO | |
TreeSet | Y(使用二叉排序树) | NO | |
Map | AbstractMap | NO | Key唯一,Value可重复 |
HashMap | NO | Key唯一,Value可重复 | |
TreeMap | Y(二叉排序树) | Key唯一,Value可重复 |
Vector和ArrayList
ArrayList和LinkedList
见博客:https://blog.csdn.net/weixin_43887870/article/details/107641340
现在讨论HashMap的线程安全性。
Hash Map线程是不安全的,为了保证线程安全可以使用
hashTable 就是在HashMap每个方法上添加synchronized关键字。不会出现两个线程同时对数据进行操作的情况,因此保证了线程安全性,但是也大大的降低了执行效率。因此是不推荐的。
2、ConcurrentHashMap
ConcurrentHashMap是HashMap的线程安全版本,相对 HashMap 和 Hashtable, ConcurrentHashMap 增加了 Segment 层,每个 Segment 原理上等同于一个 Hashtable, ConcurrentHashMap 为 Segment 的数组。
ConcurrentHashMap使用的是分段锁技术,将ConcurrentHashMap将锁一段一段的存储,然后给每一段数据配一把锁(segment),当一个线程占用一把锁(segment)访问其中一段数据的时候,其他段的数据也能被其它的线程访问,默认分配16个segment。默认比Hashtable效率提高16倍。
注:hashmap的key和value可以为null,但是concurrentHashMap的key和value不能为null。
ConcurrentHashMap 在 jdk1.7 的升级到 1.8 中的变化
HashMap与HashTable区别
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。