Java集合框架总结

Collection接口、Collections类、Map接口

Collections:集合操作工具类,包含各种操作集合的静态方法。

Collection:集合结构的父接口,关系图如下:
Collection 继承了 Iterable 迭代器接口,所有实现了 Collection 集合的实现类都可以使用迭代器进行遍历。
在这里插入图片描述
在这里插入图片描述
Map:key-value结构的父接口,关系图如下:
在这里插入图片描述

List、Set

Collection有两个子接口:List和Set,二者主要区别在于:list数据有序存放、可重复;set中数据无序存放,不可重复。

Vector、ArrayList、LinkedList

Vector:是ArrayList线程安全版本,所有方法都是用synchronized修饰的。
ArrayList:数组结构,线程不安全,可以用下标访问,访问快,由于ArrayList涉及到扩容,如果ArrayList触发扩容,代价较高,如果从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
LinkedList:链表结构,线程不安全,适合数据的动态插入和删除,随机访问和遍历速度比较慢。

HashTable、HashMap、LinkedHashMap、TreeMap

HashTable:是HashMap线程安全版本,所有方法都是用synchronized修饰的。
HashMap:数组加链表结构存储元素,数组用来存储key-value构成的Map.Entry<K,V>对象,无容量限制;链表用来解决hash冲突的情况; 基于key的hash值查找Entry对象存放到数组的位置,所以不保证数据的有序性,对于hash冲突采用链表的方式去解决。
LinkedHashMap:可以保证数据的插入序和访问序,使用双向链表来实现的。
TreeMap:存储的数据按照键值来升序排序,也可以指定比较器进行排序;使用二叉树数据结构实现的。

HashSet、LinkedHashSet

HashSet:内部使用的是HashMap,value是同一个值(new Object())。
LinkedHashSet:继承HashSet,唯一的区别是内部使用的是LinkedHashMap。

Vector、Collections.SynchronizedList、CopyOnWriteArrayList区别

1、Vector使用同步方法实现线程安全,SynchronizedList使用同步代码块实现线程安全。
2、SynchronizedList是在方法块中第一行就使用同步锁了,所以两则的性能几乎一样。
3、Collections.SynchronizedList专门用来将一个非线程安全的List转换成线程安全的List。
CopyOnWriteArrayList
java.util.concurrent.CopyOnWriteArrayList
前两者使用Java内置锁Synchronized实现线程安全,CopyOnWriteArrayList使用了可重入锁ReentrantLock 实现线程安全的;CopyOnWriteArrayList只有写操作才会被加锁,所以在保证线程安全的同时,又提高了并发性;在读线程大于写线程的时候,性能比Vector好。

ConcurrentHashMap

java.util.concurrent.ConcurrentHashMap
定义在Java并发包中的,支持并发操作,所以是线程安全的;
锁的粒度更细,使用了分段锁,所以比HashTable性能好。

参考blog:
java Collection接口和Collections类的层次关系图,类图 ,collection集合实例
https://blog.csdn.net/rocling/article/details/82813474
常用集合类简介及线程安全和非线程安全的集合对象
https://www.cnblogs.com/huangdabing/p/9249233.html
SynchronizedList和Vector的区别
https://blog.csdn.net/dviewer/article/details/52970896
Java集合系列
https://www.cnblogs.com/wlrhnh/p/7255710.html
Java并发编程:并发容器之CopyOnWriteArrayList
https://www.cnblogs.com/dolphin0520/p/3938914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值