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(红黑树)
常用集合类型区别
对比项VectorArrayListLinkedList
同步问题线程同步数组线程不同步线程不同步
底层数据结构哈希数组哈希数组链表
对比项HashSetTreeSet
底层数据结构哈希数组红黑树
对比项HashMapHashTable
同步问题非同步,使用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表示。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值