💠

💠 2024-07-13 00:44:21


JDK中的集合

Java集合必会14问(精选面试题整理)

集合继承和实现关系

  • Collection 接口

    • List 接口
      • ArrayList
      • LinkedList 也实现了Queue接口 双向链表实现
      • Vector
    • Set 接口 内容不允许重复
      • SortedSet 接口 单值排序接口
        • TreeSet
    • Queue 接口 队列接口
      • PiorityQueue
      • Dueue 双端队列
  • Map接口

    • HashMap 无序, key不重复
    • HashTable 无序, key不重复
    • TreeMap 按key排序, key不重复
    • IdentityMap key可重复
    • WeakHashMap 弱引用Map集合

Iterator

迭代器

规避 ConcurrentModificationException

  1. 使用迭代器进行删除, 或者Java8的removeIf
  2. 使用没有这个特性的容器,例如: LinkedBlockingQueue
    1. 关联此特性的容器可以查看 java.util.ConcurrentModificationException 的JavaDoc

Map

HashMap 键能为null, HashTable则不可以, 而且HashTable是线程安全的(依靠 synchronized 关键字实现)

参考: Java Map 集合类简介

HashMap

TreeMap

参考: TreeMap 红黑树算法实现


List

interface

包括的方法有: List method

List接口有众多实现, 最常用的 ArrayList LinkedList


stackoverflow: list add then unsupportedoperationexception

有时候会使用 Arrays.asList() 或者 Collections.singletonList() 来快速生成 List
但是 这两个生成的实例都是返回 AbstractList 的实现类, 其 add remove 方法是没有实现的, 如果调用了就会抛出异常

1
2
3
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

这是因为, 这个类设计就是采用的定长数组来实现List, 所以不能对其中元素进行更改 类似的还有 Collections.emptyXxx()


Set

  • Set是无序的,但是StringRedisTemplate的对象操作返回的set竟然是有序的
    • 因为有一个类是SortSet,顾名思义,所以是有序的,要继续多学习和使用Java原生的集合对象了

3分钟搞掂Set集合


第三方开源集合框架

fastutil

Github

Koloboke

Github

Trove

BitBucket