Java回顾--集合

1、Collection接口和Collections包装类:

  Collection概念:是一个集合接口,提供了对集合对象进行基本操作的通用接口方法。

     有以下结构:

    |--List

    |  |--LinkedList

    |  |--ArrayList

    |  |--Vector

    |    |--stack

    |--Set

  Collections: 包含各种有关集合操作的静态多态方法,且该类无法实例化,相当于一个工具类。

 

2、HashMap、HashTable和ConcurrentHashMap:

  HashMap的特点:线程不安全,允许传入 null值,不能保存映射的顺序。由数组(默认长度为16)+链表组成,jdk1.8后,若其链表长度大于8,就会转变成红黑树。

    ps:HashMap线程不安全,是因为多个对象同时对同一HashMap进行操作时,会导致脏读、数据丢失的发生。

  详细参考:https://www.cnblogs.com/aspirant/p/8908399.html

 

  HashTable:可以理解为线程安全的HashMap,为什么是线程安全的,因为它的put、remove、get方法都被synchronized修饰,使其同步,自然是线程安全的了。

 

  ConcurrentHashMap:是线程安全且高效的HashMap,由Segment数组结构和HashEntry数组结构组成,Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据

一个ConcurrentHashMap里包含一个Segment数组Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素, 每个Segment守护着一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。

  为什么安全:采用了分段锁技术,给Segment数组的每个元素加锁

  分段锁技术:大致含义就是,将资源分成多个段存储,再给这些资源分段分别配一把锁,这样线程访问其中一个资源也不影响其他线程访问其他分段的资源,大大提高了效率。

    

猜你喜欢

转载自www.cnblogs.com/cicada-luo/p/11483045.html
今日推荐