简介
在平时的开发里我们经常用到集合框架,比如ArrayList、HashMap、HashTable、HashSet,但是你有没有否关注过在某种特殊的场景下是否还有其它功能一样但效率更高、容错率更高的框架呢。其实我们常用的集合框架完全能帮我们解决问题,但作为一个不安分的程序员,在闲下来之后总是想试着分析分析其它的。说干就干,首先我们先要把我们的一些集合框架列出来再分别介绍,一图胜千言:
唉!作图的天分实在是太差,凑合看吧。上面是自己通过官方文档和其它渠道总结的,目测应该是算比较全面的了,如果有遗漏后边会继续补充。不整理不知道,原来有这么多数据结构框架和衍生版本,不知道是自己的知识储备太差还是平时关注比较少,虽然这里边有一些已经不推荐使用了,但我还是想全面了解一下,毕竟不会有坏处。
本来想总结几篇常用的数据结构框架,但看在这么多不认识的,姑且多总结一些吧。这片就对这些进行一些总体的总结,后边单开章节来分别介绍,首先把他们的大致用法和解释标注一下,总结的不好,如果发现有错误我会及时修改。我在写博客的时候有个习惯,非常喜欢用图来表示,总感觉文字太多了会有些难以看见去,并不是说文字描述不好,可能还是自己的文字功底太差导致的吧!废话不多说,下面进行简单总结:
关于基础的Set、Map、List、Queue这些数据结构这里不做过多的描述,大部分程序员对这些都是又一些概念的,依稀主要对以实现类在单线程和多线程的使用上进行区分
单线程
并发
List
ArrayList :Java 动态数组 LinkedList:线性数据结构
CopyOnWriteArrayList:是一个线程安全的ArrayList,做遍历用 Vector:支持线程同步的动态数组
Queue/Deque
ArrayDeque:双端队列实现 Stack:标准的后进先出的栈 PriorityQueue:通过二叉小顶堆实现
ArrayBlockingQueue:数组实现的线程安全的有界的阻塞队列 ConcurrentLinkedDeque / ConcurrentLinkedQueue:非阻塞,无锁,无界 ,线程安全双端操作的队列 DelayQueue:在指定时间才能获取队列元素 LinkedBlockingDeque / LinkedBlockingQueue:可选容量的有界双向链表队列,可设置是否带边界 LinkedTransferQueue:可将元素transfer
进行w/o存储 PriorityBlockingQueue:支持优先级的无界阻塞队列 SynchronousQueue:使用Queue
接口进行Exchanger
Map
HashMap:散列表,存放Key-Value的数据结构 EnumMap:Key 可以是Enum类型的对象 Hashtable:基于Dictionary类实现的比较陈旧 IdentityHashMap:严格判断key值是否相等 LinkedHashMap:保持插入顺序 TreeMap:对插入的键进行排序 WeakHashMap:适用于做一些缓存操作
ConcurrentHashMap:它是HashMap的一个线程安全的、支持高效并发的版本 ConcurrentSkipListMap:一个并发安全, 基于skip list 实现有序存储的Map
Set
HashSet:存储元素不可重复,底层基于HashMap EnumSet:专门为Eunm设计的集合类 BitSet:Bit或密集的整数Set LinkedHashSet:保持Key插入顺序 TreeSet:有序集合
ConcurrentSkipListSet:排序并发Set CopyOnWriteArraySet:做遍历用
上面对这些集合类做了一些总结,几乎每个应用场景都有对应的功能,现在回想起来以前代码写的确实性能欠佳,如果替换成以上的性能估计会提升不少,所以后面尝试对自己的应用做一些数据方面的性能处理。这一篇写到这里,后边会把一些集合类拿出来分析,预计能提升不少的见识。刚开始写博客确实语言组织方面差点,不过相信坚持一段时间之后会有提升的。
学习之后,你解决问题的思路和方法是否得到了改变。如果你学习之后和学习之前,思考和行动都一样,那么显然这样的学习是无效的。从现在开始努力,日拱一卒。