java-数据结构-续
接口:
Collection<E>
子接口:
BlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>
实现类:
ArrayBlockingQueue, ArrayDeque, ArrayList, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, Stack, SynchronousQueue, TreeSet, Vector List<E>
实现类:
ArrayList, CopyOnWriteArrayList, LinkedList,Stack, Vector Queue<E>
子接口:
BlockingDeque<E>, BlockingQueue<E>, Deque<E>
实现类:
ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue Set<E>
子接口:
NavigableSet<E>, SortedSet<E>
实现类:
ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, LinkedHashSet, TreeSet Map<K,V>
子接口:
ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, SortedMap<K,V>
实现类:
ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, TreeMap, WeakHashMap 并发与线程安全等
通常含有Concurrent,CopyOnWrite,Blocking的是线程安全的,但是这些线程安全通常是有条件的,所以在使用前一定要仔细阅读文档。具体实现:
List<E>系列:
ArrayList<E>,如其名,但是其容量增长计划是newCapacity = (oldCapacity * 3)/2 + 1,和C++通常的Vector是翻倍的策略不同。
CopyOnWriteArrayList<E>,里面有一个ReentrantLock,每当add时,都锁住,把所有的元素都复制到一个新的数组上。
只保证历遍操作是线程安全的,get操作并不保证,也就是说如果先得到size,再调用get(size-1),有可能会失效
那么CopyOnWriteArrayList是如何实现线程安全的迭代操作?
在迭代器中保存原数组。
LinkedList<E>,标准双向链表
Vector<E>,过时,多数方法上加上了synchronized
Stack<E>,继承自Vector,过时,优先应使用 Deque<Integer> stack = new ArrayDeque<Integer>();Queue<E>系列:
LinkedList<E>,见List<E>系列
ArrayDeque<E>,内部用一个数组保存元素,有int类型head和tail的。
PriorityQueue<E>,内部用一个数组来保存元素,但数组是以堆的形式来组织的,因此是有序的。
PriorityBlockingQueue<E>,包装了一个PriorityQueue<E>,一个ReentrantLock,一个Condition,TODO
ArrayBlockingQueue<E>,TODO
ConcurrentLinkedQueue<E>,TODO
DelayQueue<E>,TODO
LinkedBlockingDeque<E>,TODO
LinkedBlockingQueue<E>,TODO
SynchronousQueue<E>,TODODeque<E>(双端队列)系列:
ArrayDeque<E>,见Queue系列
LinkedList<E>,见List系列
LinkedBlockingDeque<E>,TODOSet系列:
HashSet,包装了一个HashMap:public HashSet() {map = new HashMap<E,Object>();}
TreeSet,包装了一个TreeMap,参考HashSet
LinkedHashSet,包装了LinkedHashMap,参考HashSet
EnumSet,TODO
CopyOnWriteArraySet,简单包装了CopyOnWriteArrayList,注意这个Set的get的时间复杂度。
ConcurrentSkipListSet,包装了一个ConcurrentSkipListMap,参考HashSet。Map系列:
HashMap<K,V>,标准链地址法实现
TreeMap<K,V>,红黑二叉树
LinkedHashMap<K,V>,在Entry中增加before和after指针把HashMap中的元素串联起来,这样在迭代时,就可以按插入顺序历遍。
EnumMap,TODO
ConcurrentHashMap,参考之前的文章
ConcurrentSkipListMap,TODO,log(n)的时间复杂度,有点像多级链表保存的,貌似有点像redis中的SortedSet的实现
Hashtable,过时
IdentityHashMap,正常的HashMap中比较是用equals方法,这个用的是“==”比较符
WeakHashMap<K,V>,弱引用的HashMap,正常的HashMap是强引用,即里面的value不会被GC回收,在WeakHashMap<K,V>中,V中最好是WeakReference类型的,用像这样的代码:m.put(key, new WeakReference(value))。其它的一些实用的第三方的数据结构:
LRUCache,LongHashMap,Java7中的LinkedTransferQueue,
Apache的包,里面有很多实用的类:
http://commons.apache.org/collections/
Google的包,里面有很多并发的牛B类:
AtomicLongMap,等等
大对象的数据结构:https://github.com/HugeCollections/Collections
注意事项:
并发容器多数不能使用null值
java-数据结构-续相关推荐
- java队列_如何彻底搞懂 Java 数据结构?CSDN 博文精选
作者 | 张振华.Jack 责编 | 郭芮 出品 | CSDN 博客 本文和大家一起来重温<Java数据结构>经典之作. Java数据结构 要理解Java数据结构,必须能清楚何为数据结构? ...
- Java 数据结构与算法系列之冒泡排序
一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...
- Java数据结构与算法——树(基本概念,很重要)
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...
- java数据结构 队列_Java数据结构与算法[原创]——队列
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本文介绍数据结构中的队列(queue)的概念.存储结构.队列的特点,文末给出ja ...
- 数据结构 python的书推荐-java数据结构书一般推荐看什么好?
想要学习java的各种数据结构,一本良好的书籍会让你受益匪浅,本文就来推荐一些学习java数据结构适合看的书. 一.入门推荐 因为是入门,所以我们先不要求实现,阅读一些通过图片,打比方等通俗易懂的方法 ...
- Java数据结构与算法——插入排序
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...
- java数据结构实验一顺序表,java数据结构实验代码之升序顺序表
java数据结构实验代码之升序顺序表 数据结构实验报告 学院:管理学院 班级:13电子商务(1)班 姓名:廖秋君 学号:3213004779 2014年 10月 23 日 目录 一.需求分析----- ...
- 20180826(01)-Java数据结构
Java 数据结构 Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举 (Enumeration) 位集合(BitSet) 向量 (Vector) 栈 (Sta ...
最新文章
- 了解浏览器工作原理-初步
- 【Storage】Ubuntu LVM 安装配置
- java 关于日期的一些常用惯例
- 【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质 | 证明过程 )
- ssh密钥分发之二:使用sshpass配合ssh-kopy-id编写脚本批量分发密钥:
- 嵌入式开发之网络心跳包---阻塞和非阻塞以及是否有必要心跳包heartbeat
- java关于23种设计模式的有趣见解
- 3.5 矩阵 $4$ 个空间和方程 $A\mathbf{x}=\mathbf{y}$ 的关系
- 迭代加深搜索 C++解题报告 :[SCOI2005]骑士精神
- java集合转换_java各种集合的转换
- 1 SAP DEBUG调试改表操作手册
- String str = new String(abc)创建了几个对象?结合源码解析
- elasticsearch的简介_以及实现原理---全文检索引擎ElasticSearch工作笔记001
- 基于LSTM的中文文本多分类
- [SCOI2016]背单词
- 【Unity步步升】导航网格、寻路算法及AI行为树等应用与实践...
- python读取Himawari8数据
- ajax跨域支持post,支持post请求的js跨域方法汇总
- win10两台电脑时间同步
- 2020大创笔记(二)
热门文章
- Uedit32安装教程附安装包资源
- 简单的多目标遗传算法实现
- SpringMVC(一)——入门案例
- 计算机进桌面后反复重启,我的电脑一插网线就自动重启。到界面之后又马上重启。一直循环。...
- c语言 char memcpy,在C中使用memcpy复制无符号字符数组
- Python os和os.path的基础知识与常用操作
- python中循环结构分有,python常见循环结构有哪些
- java数组解析_Java - 数组解析
- julia(5)-变量与内部常量
- 让算法工程师破防的瞬间