Java集合类型——持续更新

更新时间

第一版:20200703

集合

问题

   1. 整理全部的数据类型
   2. 每个数据类型的底层数据结构、是数组、链表、栈、散列表、队列、红黑树、二叉树、B树
   3. 对比每种数据类型的区别
   4. 每种数据类型的使用场景

java数据结构主要接口和类

  1. 枚举(Enum)
  2. 位集合(BitSet)
  3. 向量(Vector)
  4. 栈(Stack)
  5. 字典(Dictionary)
  6. 哈希表(HashTable)
  7. 属性(Properties)

集合(其中包括接口和实现类)

  • 看后缀:Set,List,Map
  • 看前缀:前缀代表数据结构的具体实现方式
    • Hash、Array:哈希数组实现的数据结构
    • Linked:链表实现的数据结构
    • Tree,Sorted:代表着内部使用红黑树排序,需要实现Comparable方式
  • Collection

    • List:(队列)有插入顺序,可重复元素
      • AbstractList
        • ArrayList(哈希数组) 适合随机读取,不适合在集合中间插入删除,时间复杂度在O(1),非线程同步的数组
        • AbstractSequentialList
          • LinkedList(双向链表) 适合插入头尾插入删除,不适合随机读取,时间复杂度在O(n)
        • Vector(数组)线程同步的数组
          • Stack(数组)LIFO 后劲先出
    • Set:(集合)无插入顺序,不可重复数据,允许包含null元素,最多一个null
      • AbstractSet
        • HashSet(哈希数组)
          • LinkedHashSet(链表)
        • TreeSet(红黑树)
      • SortSet(红黑树)有序集合
        • TreeSet(红黑树)
    • Queue
  • 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
    • SortedMap
      • TreeMap(红黑树)

常用集合类型区别

对比项 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表示。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章