更新时间
第一版:20200703
问题
1. 整理全部的数据类型
2. 每个数据类型的底层数据结构、是数组、链表、栈、散列表、队列、红黑树、二叉树、B树
3. 对比每种数据类型的区别
4. 每种数据类型的使用场景
java数据结构主要接口和类
- 枚举(Enum)
- 位集合(BitSet)
- 向量(Vector)
- 栈(Stack)
- 字典(Dictionary)
- 哈希表(HashTable)
- 属性(Properties)
集合(其中包括接口和实现类)
- 看后缀:Set,List,Map
- 看前缀:前缀代表数据结构的具体实现方式
- Hash、Array:哈希数组实现的数据结构
- Linked:链表实现的数据结构
- Tree,Sorted:代表着内部使用红黑树排序,需要实现Comparable方式
-
Collection
- List:(队列)有插入顺序,可重复元素
- AbstractList
- ArrayList(哈希数组) 适合随机读取,不适合在集合中间插入删除,时间复杂度在O(1),非线程同步的数组
- AbstractSequentialList
- LinkedList(双向链表) 适合插入头尾插入删除,不适合随机读取,时间复杂度在O(n)
- Vector(数组)线程同步的数组
- Stack(数组)LIFO 后劲先出
- AbstractList
- Set:(集合)无插入顺序,不可重复数据,允许包含null元素,最多一个null
- AbstractSet
- HashSet(哈希数组)
- LinkedHashSet(链表)
- TreeSet(红黑树)
- HashSet(哈希数组)
- SortSet(红黑树)有序集合
- TreeSet(红黑树)
- AbstractSet
- Queue
- List:(队列)有插入顺序,可重复元素
-
Map:(Hash表) Key-Value 键值对
- AbstractMap
- HashMap(哈希数组) key可以为null HashMap是一个个Entry(key-value键值对)存储在一个哈希数组上,Entity是Has和Map的内部类,哈希数组使用过程中会遇到哈希碰撞的问题,出现不用value计算得到同一个key,常用解决方案有:拉链法(jdk)、再哈希,开放地址法。再jdk1.8中引入红黑树来存储value值。使时间复杂度保证在O(logN)以内
- LinkedHashMap(双向链表)
- HashTable(哈希数组)key不能为null
- TreeMap(红黑树)
- IdentityHashMap
- WeakHashMap
- HashMap(哈希数组) key可以为null HashMap是一个个Entry(key-value键值对)存储在一个哈希数组上,Entity是Has和Map的内部类,哈希数组使用过程中会遇到哈希碰撞的问题,出现不用value计算得到同一个key,常用解决方案有:拉链法(jdk)、再哈希,开放地址法。再jdk1.8中引入红黑树来存储value值。使时间复杂度保证在O(logN)以内
- SortedMap
- TreeMap(红黑树)
- AbstractMap
常用集合类型区别
对比项 | Vector | ArrayList | LinkedList |
---|---|---|---|
同步问题 | 线程同步数组 | 线程不同步 | 线程不同步 |
底层数据结构 | 哈希数组 | 哈希数组 | 链表 |
对比项 | HashSet | TreeSet |
---|---|---|
底层数据结构 | 哈希数组 | 红黑树 |
对比项 | HashMap | HashTable |
---|---|---|
同步问题 | 非同步,使用fail-fast迭代器, | 同步,线程安全的,多个线程共享一个HashTable,使用enumeration迭代器 |
底层数据结构 | 哈希数组 | 红黑树 |
两个集合工具类对比Collections和Arrays
内部提供了封装器实现(Wrapper Implementations),数据结构算法和数组操作
Collections
- Collections还有一个重要功能就是“封装器”(Wrapper),它提供了一些方法可以把一个集合转换成一个特殊的集合,如下:
- unmodifiableXXX:转换成只读集合,这里XXX代表六种基本集合接口:Collection、List、Map、Set、SortedMap和SortedSet。如果你对只读集合进行插入删除操作,将会抛出UnsupportedOperationException异常。
- synchronizedXXX:转换成同步集合。
singleton:创建一个仅有一个元素的集合,这里singleton生成的是单元素Set, - singletonList和singletonMap分别生成单元素的List和Map。
- 空集:由Collections的静态属性EMPTY_SET、EMPTY_LIST和EMPTY_MAP表示。