Java高频面试之集合-01

发布于:2025-03-08 ⋅ 阅读:(81) ⋅ 点赞:(0)

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶

面试官:说说java的集合框架

Java集合框架(Java Collections Framework,JCF)是Java中用于存储、操作和管理数据结构的核心库。它提供了一组标准化的接口、实现类和算法,使得开发者能够高效地处理各种数据集合。


1. 集合框架的核心接口

Java集合框架主要围绕以下几个核心接口构建:

(1) Collection 接口
  • 特点:表示一组对象的集合。
  • 子接口
    • List:有序集合,允许重复元素。
      • 实现类:ArrayListLinkedListVectorStack
    • Set:无序集合,不允许重复元素。
      • 实现类:HashSetLinkedHashSetTreeSet
    • Queue:队列,支持先进先出(FIFO)或优先级操作。
      • 实现类:LinkedListPriorityQueueArrayDeque
(2) Map 接口
  • 特点:存储键值对(Key-Value),键唯一,值可重复。
  • 实现类HashMapLinkedHashMapTreeMapHashtableConcurrentHashMap

2. 主要实现类及特性

(1) List 接口的实现类
类名 数据结构 线程安全 特点
ArrayList 动态数组 不安全 随机访问快(O(1)),增删慢(需移动元素)。
LinkedList 双向链表 不安全 增删快(O(1)),随机访问慢(O(n)),可用作队列或栈。
Vector 动态数组 安全 线程安全但性能差,已被Collections.synchronizedListCopyOnWriteArrayList替代。
(2) Set 接口的实现类
类名 数据结构 特点
HashSet 哈希表 无序,允许null元素,依赖hashCode()equals()
LinkedHashSet 哈希表 + 链表 维护插入顺序,性能略低于HashSet
TreeSet 红黑树 元素有序(自然顺序或Comparator),增删查时间复杂度为 O(log n)。
(3) Map 接口的实现类
类名 数据结构 线程安全 特点
HashMap 哈希表 不安全 允许null键/值,查找性能 O(1),默认负载因子 0.75。
LinkedHashMap 哈希表 + 链表 不安全 维护插入顺序或访问顺序(适合实现LRU缓存)。
TreeMap 红黑树 不安全 键有序(自然顺序或Comparator),增删查 O(log n)。
Hashtable 哈希表 安全 线程安全但性能差,已被ConcurrentHashMap替代。
ConcurrentHashMap 分段锁/CAS 安全 高并发场景下的首选,性能接近HashMap

3. 集合的遍历方式

(1) 迭代器 Iterator
List<String> list = new ArrayList<>();
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}
(2) 增强 for 循环
for (String s : list) {
    System.out.println(s);
}
(3) Lambda 表达式(Java 8+)
list.forEach(s -> System.out.println(s));

4. 集合排序与比较

(1) Comparable 接口
  • 自然排序:对象自身实现compareTo()方法。
class Student implements Comparable<Student> {
    @Override
    public int compareTo(Student o) {
        return this.age - o.age;
    }
}
(2) Comparator 接口
  • 定制排序:通过外部比较器定义排序规则。
Comparator<Student> comparator = (s1, s2) -> s1.getName().compareTo(s2.getName());
Collections.sort(students, comparator);

5. 线程安全与并发集合

(1) 同步包装类
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
(2) java.util.concurrent
类名 特点
CopyOnWriteArrayList 写时复制,读操作无锁,适合读多写少场景。
ConcurrentHashMap 分段锁(JDK7)或CAS + 红黑树(JDK8+),高并发性能优异。
BlockingQueue 支持阻塞操作的队列,如ArrayBlockingQueueLinkedBlockingQueue

6. 集合的性能对比

操作 ArrayList LinkedList HashMap TreeMap
随机访问 O(1) O(n) O(1) O(log n)
插入/删除(头) O(n) O(1) - -
插入/删除(尾) O(1) O(1) - -
搜索 O(n) O(n) O(1) O(log n)

7. 工具类:CollectionsArrays

(1) Collections
  • 提供静态方法操作集合:
    • sort():排序。
    • reverse():反转。
    • shuffle():随机打乱。
    • synchronizedXXX():生成同步集合。
(2) Arrays
  • 提供静态方法操作数组:
    • asList():数组转List。
    • sort():排序。
    • binarySearch():二分查找。

8. Java 8+ 的增强

(1) Stream API
List<Integer> evenNumbers = list.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());
(2) Lambda 表达式
list.removeIf(s -> s.length() > 5);
(3) 新集合方法
Map<String, List<Student>> groupByCity = students.stream()
    .collect(Collectors.groupingBy(Student::getCity));

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到