map,set,list下的数据结构总括

2019/7/24 16:30:52 人评论 次浏览 分类:学习教程

数据结构

依赖关系图

大纲

集合安全问题

ArrayList、HashSet、HashMap 非线程安全

在扩容时均未线程安全的。

Vector,HashTable,ConcurrentHashMap   线程安全

Collections.synchronizedList(list)线程安全

Collections.synchronizedCollection(c)    Collections.synchronizedList(list)

Collections.synchronizedMap(m)           Collections.synchronizedSet(s)

List list = Collections.synchronizedList(new ArrayList())

原理:在集合的核心方法添加上了 synchronized(mutex)关键字,mutex本质上为当前list。

 

普通集合,线程安全集合,并发集合

普通集合:通常性能最高,但是不保证多线程的安全性和并发的可靠性。

线程安全集合:是给集合添加了 synchronized 同步锁,严重牺牲了性能,而且对并发的效率就

更低了,并发集合则通过复杂的策略不仅保证了多线程的安全又提高的并发时的效率

并发集合:通过复杂的策略不仅保证了多线程的安全又提高的并发时的效率,位 于 java.util.concurrent 包。如ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque 等,

位 于 java.util.concurrent 包。

 

Map架构

 

Collection架构

 

 

List,Set,Map的区别

List

单列数据集合

有序

可以重复

ArrayList,LinkedList,Vectory,Stack

Set

单列数据集合

无序

不可以重复

HashSet,TreeSet,LinkedHashSet

Map

key-value数据集合

无序

 key不能重复

Hashtable,Directory,HashMap,TreeMap,LinkedHashMap

 

ArrayList,LinkedList,Vectory,Stack区别

结构

特点

ArrayList

动态数组实现的非线程安全的

查询快,增删慢    存在空间浪费的情况

LinkedList

双向链表实现的非线程安全的

增删快,查询慢   

Vector

动态数组实现的线程安全的矢量队列

线程安全的,操作慢

Stack

动态数组实现的线程安全的FIFO栈结构

线程安全的,操作慢   pop(),push(E)

 

Hashtable,Directory,HashMap,TreeMap,LinkedHashMap区别

实现方式

HashMap

非线程安全的无序的键值对结构;基于动态数组的链表结构允许key-value同时为null

LinkedHashMap

HashMap的子类,非线程安全的有序(按照添加顺序)的键值对

TreeMap

非线程安全的有序的键值对;默认采取自然排序,自定义排序时Key要实现Comparable

ConcurrentHashMap

线程安全的无序的键值对;基于定长数组的HashMap结构,桶加锁

ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁。

Hashtable

线程安全(整个表的加锁)的无序的键值对;弃用;键或值不允许为null;效率<HashMap

Directory

Hashtable的子类,线程安全的无序的键值对;弃用

 

HashSet,TreeSet,LinkedHashSet区别

实现方式

HashSet

依赖于HashMap实现的无序的,非线程安全的不可重复的结构(equals(),hashCode())

LinkedHashSet

HashSet的子类,基于LinkedHashMap的实现;非线程安全的按照添加顺序的结构

TreeSet

线程安全的有序的键值对(自然排序、指定排序),Key要实现Comparable接口

 

相关资讯

  • 那些我们不愿意承认的事

    很久没有见的老朋友,准确的说应该是很久没有见过的老师,一个比我大两岁的老师,我上初中的时候他从高中回来教我了一年。后来又回去上高中,我上高中的时候他上大学,现在我刚大学毕业他创办了公司。昨日一见依然如故,他还是热爱销售,而我却成了纯粹的技术人员。 看到他…

    2015/6/22 13:12:47

学习教程

共有访客发表了评论 网友评论

验证码: 看不清楚?

    立即查看