Java集合类型——持续更新

    技术2024-01-08  65

    更新时间

    第一版: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 后劲先出 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不能为nullTreeMap(红黑树)IdentityHashMapWeakHashMap 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表示。
    Processed: 0.024, SQL: 9