集合框架概述

Java集合框架(Java Collections Framework)是一组用来存储和操作数据的类和接口,位于java.util包中。它提供了高效的数据结构和算法,简化了程序员的工作。

集合框架主要接口

1. Collection接口 (根接口)

  • List:有序集合,元素可重复
  • Set:无序集合,元素不可重复
  • Queue:队列,先进先出(FIFO)

2. Map接口 (独立于Collection)

  • 键值对存储结构

主要实现类

List接口实现类

  1. ArrayList
    • 基于动态数组实现
    • 随机访问快(O(1)),插入删除慢(O(n))
    • 线程不安全
  2. LinkedList
    • 基于双向链表实现
    • 插入删除快(O(1)),随机访问慢(O(n))
    • 实现了Deque接口,可用作队列或栈
  3. Vector
    • 类似ArrayList,但线程安全
    • 性能较差,已被ArrayList取代
  4. Stack (继承自Vector)
    • 后进先出(LIFO)的栈结构

Set接口实现类

  1. HashSet
    • 基于HashMap实现
    • 无序,允许null元素
    • 添加、删除、查找时间复杂度O(1)
  2. LinkedHashSet
    • 继承HashSet,维护插入顺序
    • 性能略低于HashSet
  3. TreeSet
    • 基于TreeMap实现(红黑树)
    • 元素按自然顺序或Comparator排序
    • 添加、删除、查找时间复杂度O(log n)

Queue接口实现类

  1. PriorityQueue
    • 基于优先级堆实现
    • 元素按自然顺序或Comparator排序
  2. ArrayDeque
    • 基于可调整大小的数组实现
    • 可用作栈或队列

Map接口实现类

  1. HashMap
    • 基于哈希表实现(数组+链表+红黑树)
    • 允许null键和null值
    • 无序,线程不安全
  2. LinkedHashMap
    • 继承HashMap,维护插入顺序或访问顺序
    • 性能略低于HashMap
  3. TreeMap
    • 基于红黑树实现
    • 键按自然顺序或Comparator排序
  4. Hashtable
    • 类似HashMap,但线程安全
    • 不允许null键和null值
    • 已被ConcurrentHashMap取代
  5. ConcurrentHashMap
    • 线程安全的HashMap
    • 采用分段锁技术,性能优于Hashtable

集合工具类Collections

提供了一系列静态方法用于操作集合:

  • sort():排序
  • shuffle():随机打乱
  • reverse():反转
  • synchronizedXxx():返回线程安全的集合
  • unmodifiableXxx():返回不可修改的集合

集合遍历方式

  1. for循环 (适用于List)

    java

    1
    2
    3
    for(int i=0; i<list.size(); i++) {
    System.out.println(list.get(i));
    }
  2. 增强for循环

    java

    1
    2
    3
    for(String item : list) {
    System.out.println(item);
    }
  3. 迭代器Iterator

    java

    1
    2
    3
    4
    Iterator<String> it = list.iterator();
    while(it.hasNext()) {
    System.out.println(it.next());
    }
  4. ListIterator (仅List可用,可双向遍历)

    java

    1
    2
    3
    4
    ListIterator<String> lit = list.listIterator();
    while(lit.hasNext()) {
    System.out.println(lit.next());
    }
  5. forEach()方法 (Java8+)

    java

    1
    list.forEach(item -> System.out.println(item));

集合选择原则

  1. 需要唯一性 → Set
  2. 需要有序 → List
  3. 需要键值对 → Map
  4. 需要快速访问 → ArrayList/HashMap
  5. 需要频繁插入删除 → LinkedList
  6. 需要排序 → TreeSet/TreeMap
  7. 需要线程安全 → ConcurrentHashMap/Collections.synchronizedXxx()

Java8+新特性

  1. Stream API:函数式操作集合

    java

    1
    list.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);
  2. 默认方法:如List的sort()方法

    java

    1
    list.sort(Comparator.naturalOrder());
  3. 不可变集合:Java9引入的工厂方法

    java

    1
    List<String> immutableList = List.of("a", "b", "c");

掌握集合框架对于Java开发至关重要,合理选择集合类型可以显著提高程序性能和可维护性。