java.util.Collection

java.util.Collection

这里写图片描述

  • LinkedList
    • 包含 prev、next 的链接表
    • Node{item, next, prev}
  • ArrayList、Vector、Stack
    • 可扩容数组,ArrayList 扩容的大小原来的 1.5 倍,Vector 扩容一个指定大小或原来大小 2 倍,数组大小超过 Integer.MAX_VALUE 都抛出 oom
    • 其中 Stack 中元素为 0 个则 pop、peek、search 操作会一直阻塞
    • Vector Stack 都是加同步锁线程安全的,所以单线程效率不高
  • TreeSet
    • 基于 TreeMap
    • 通过持有一个 TreeMap 实例实现,其中 TreeSet 的 value 变成 TreeMap 的 k,传给 TreeMap 的 v 是一个 TreeSet 持有的 private static final Object PRESENT = new Object() 实例
  • HashSet
    • 基于 HashMap
    • 不可重复的值,基于 HashMap 的 key 不可重复实现
    • 通过持有一个 HashMap 实例实现,其中 HashSet 的 value 变成 HashMap 的 k,传给 HashMap 的 v 是一个 HashSet 持有的 private static final Object PRESENT = new Object() 实例
  • LinkedHashSet
    • 基于 LinkedHashMap
    • 父类是 HashSet
    • 维护一个有序的输出(按插入顺序)
  • Hashtable
    • K 和 V 均不能为 null
    • Entry{hash, key, value, next}
    • Entry< ?, ? >[] table
    • 线程安全
  • TreeMap
    • Entry root:链表,其实是一棵树
    • 使用红黑树算法,输出有序
    • 根据 K 进行比较判断是插入树的 L 还是 R 或直接替换 Self 的值
    • K 不能为 null
    • Entry{key, value, left, right, parent}
    • navigableKeySet().iterator()
  • HashMap
    • Node[] table:数组形式
    • K 和 V 均可为 null
    • Node{hash, key, value, next}
    • keySet().iterator()
    • get()原理:先根据 hash 找到 Node 链,再遍历 Node 链元素根据 K==k || k.equals(K) 查找
  • LinkedHashMap
    • 父类是 HashMap
    • 维护一个有序的输出(按插入顺序)
    • Entry{before,next} 继承父类的 HashMap.Node
    • 父类调用子类重写的如下方法维护一个 K 的链表
      • afterNodeAccess()
      • afterNodeInsertion()
      • afterNodeRemoval()
  • EnumMap
    • size 是非 null 的个数
    • 有两个数组
    • K[] keyUniverse
    • Object[] vals
  • IdentityHashMap
    • 用的是 == 而不是 equals
    • Object [] table
  • WeakHashMap
    • 是 key 被回收
    • Entry 继承 WeakReference

plantUml

@startUml

interface Collection
interface List
interface Set
interface SortedSet
interface NavigableSet

abstract class AbstractCollection
abstract class AbstractList
abstract class AbstractSet
abstract class AbstractSequentialList
abstract class EnumSet

Collection <|.. AbstractCollection

Collection <|-- List
AbstractCollection <|-- AbstractList
List <|.. AbstractList
AbstractList <|-- ArrayList
AbstractList <|-- Vector
Vector <|-- Stack
AbstractList <|-- AbstractSequentialList
AbstractSequentialList <|-- LinkedList

Collection <|-- Set
Set <|.. AbstractSet
AbstractCollection <|-- AbstractSet
AbstractSet <|-- HashSet
HashSet <|-- LinkedHashSet
Set <|--SortedSet
SortedSet <|-- NavigableSet
NavigableSet <|.. TreeSet
AbstractSet <|-- TreeSet
AbstractSet <|-- EnumSet
EnumSet <|-- JumboEnumSet

interface Queue
interface Deque
abstract class AbstractQueue
Deque <|.. ArrayDeque
AbstractCollection <|-- ArrayDeque
AbstractQueue <|-- PriorityQueue

Collection <|-- Queue
Queue <|-- Deque
Queue <|.. AbstractQueue
AbstractCollection <|-- AbstractQueue

interface Map
interface SortedMap
interface NavigableMap
abstract class Dictionary
abstract class AbstractMap
abstract class Enum

Map <|.. Hashtable
Dictionary <|-- Hashtable
Map <|.. AbstractMap
AbstractMap <|-- HashMap
Map <|-- SortedMap
SortedMap <|-- NavigableMap
NavigableMap <|.. TreeMap
AbstractMap <|-- TreeMap
HashMap <|-- LinkedHashMap
AbstractMap <|-- WeakHashMap
AbstractMap <|-- EnumMap
Enum <|-- EnumMap
AbstractMap <|-- IdentityHashMap

interface Iterator
interface ListIterator
interface PrimitiveIterator

Iterator <|-- ListIterator
Iterator <|-- PrimitiveIterator

@endUml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值