ConcurrentHashMap,HashTable,TreeMap,LinkedHashMap
ConcurrentHashMap
ConcurrentHashmap与HashMap相似,其特点有:
- 支持并发操作,是线程安全的
- 采用了分段锁(Segment锁),来实现并发操作。
ConcurrentHashMap包括多个Segment段,相当于Segment数组,每个Segment继承了ReentrantLock来进行加锁,每次锁操作锁住的是一个Segment,于是一个线程在读写某个Segment时,该Segment上锁,保证了线程的安全,同时其他的线程可以读写没被上锁的Segment,实现了多线程的并发操作。
concurrencyLevel: 并发数,Segment数。表示ConcurrentHashMap中包含的Segment数量,默认值是16.
也就是最多同时支持16个线程的写操作。并发数可以在初始化时设置,一旦初始化后不能扩容。
Java8中ConcurrentHashMap也引入了红黑树,每个Segment的实现与HashMap类似。
ConcurrentHashMap的方法与HashMap基本相同,详见HashMap用法
HashTable
HashTable是遗留的类,功能与HashMap类似,是线程安全的,同一时间只有一个线程能写,并发性不如ConcurrentHashMap。
不建议使用HashTable,可以用HashMap和ConcurrentHashMap代替。
TreeMap
TreeMap实现了SortedMap接口,能够根据键值排序,默认按键值升序排序。
也可以指定排序的比较器。
使用TreeMap时,key要实现Comparable接口或者传入自定义的Comparator比较器,也就是key要能够比较都行,否则报错。
LinkedHashMap
在HashMap的基础上,记录了元素插入的顺序,因此其遍历顺序与插入顺序是相同的。
版权声明:本文为Sungree原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。