Java回顾--集合

一、Collection接口和Collections包装类:

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

     有如下结构:数组

    |--List安全

    |  |--LinkedList工具

    |  |--ArrayList线程

    |  |--Vectorhtm

    |    |--stack对象

    |--Setblog

  Collections: 包含各类有关集合操做的静态多态方法,且该类没法实例化,至关于一个工具类。接口

 

二、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数组的每一个元素加锁

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

相关文章
相关标签/搜索