Java中常见的类

123 阅读2分钟

1. List 接口实现

  • ArrayList
    动态数组:基于可调整大小的数组实现,支持快速随机访问,扩容时通常增长50%。
  • LinkedList
    双向链表:通过节点(Node)的prevnext指针连接元素,支持高效插入/删除,但随机访问较慢。
  • Vector
    同步动态数组:类似ArrayList,但所有方法用synchronized修饰(线程安全),已逐渐被CopyOnWriteArrayListCollections.synchronizedList取代。

2. Set 接口实现

  • HashSet
    哈希表:内部基于HashMap实现,元素作为键,值统一为虚拟对象(如PRESENT)。

  • LinkedHashSet
    链表+哈希表:继承HashSet,内部通过LinkedHashMap维护插入顺序或访问顺序。

  • TreeSet
    红黑树:基于TreeMap实现,元素按自然顺序或自定义比较器排序。

  • EnumSet
    位向量(Bit Vector) :专为枚举类型优化,底层用位掩码存储,高效且内存紧凑。

3. Map 接口实现

  • HashMap 数组+链表+红黑树
  • LinkedHashMap 链表+HashMap (插入节点时会用额外的链表记录插入顺序)
  • TreeMap 红黑树
  • Hashtable
    数组+链表:早期线程安全的哈希表,通过synchronized方法实现同步,已被ConcurrentHashMap取代。
  • IdentityHashMap
    线性探测哈希表:使用==而非equals()比较键,适合需要对象地址相等性的场景。
  • WeakHashMap
    弱引用键哈希表:键为弱引用,当键不再被强引用时,条目会被自动回收,常用于缓存。
  • EnumMap
    枚举专用数组:以枚举常量为键,内部用数组按枚举顺序存储值,紧凑高效。

4. Queue/Deque 接口实现

  • PriorityQueue 最小堆
  • ArrayDeque
    循环数组:用数组实现双端队列,支持高效的头尾操作(如addFirstpollLast)。
  • ConcurrentLinkedQueue
    无锁链表:基于CAS操作的线程安全队列,适用于高并发场景。
  • PriorityBlockingQueue
    堆+锁:线程安全的优先级队列,内部使用数组实现最小堆,通过锁保证并发安全。

5. 并发数据结构

  • ConcurrentHashMap
    分段锁/CAS:JDK8前采用分段锁,之后改用CAS+synchronized优化并发性能。

  • CopyOnWriteArrayList
    写时复制数组:修改操作(如add)时复制整个数组,保证读操作无锁,适合读多写少场景。

  • BlockingQueue 实现类

    • ArrayBlockingQueue数组+锁,固定大小的阻塞队列。
    • LinkedBlockingQueue链表+锁,可选有界或无界。
    • PriorityBlockingQueue堆+锁,支持优先级的阻塞队列。

6. 特殊用途类

  • Stack
    数组:继承自Vector,用数组实现栈结构(方法为synchronized),但官方推荐用Deque替代。
  • BitSet
    位数组:动态长度的位向量,用于高效处理位级操作(如标志位存储)。