Java 集合

Java 的集合框架(Java Collections Framework,JCF)是一组用于存储和操作数据的接口、实现类和算法。它提供了高效的数据结构和算法,简化了开发者的工作。Java 集合框架的核心接口和类都位于 java.util 包中。


1. 集合框架的核心接口

Java 集合框架的核心接口包括:

  1. Collection:所有集合类的根接口,定义了基本的集合操作(如添加、删除、遍历)。
    • 子接口:
      • List:有序且允许重复元素的集合。
      • Set:无序且不允许重复元素的集合。
      • Queue:队列,支持先进先出(FIFO)操作。
  2. Map:存储键值对(Key-Value Pair),键不允许重复。

2. 常用集合类

以下是 Java 集合框架中常用的实现类:

(1) List 接口的实现类
  • ArrayList
    • 基于动态数组实现。
    • 支持快速随机访问,但插入和删除效率较低。
    • 示例:
      List<String> list = new ArrayList<>();
      list.add("Java");
      list.add("Python");
      System.out.println(list.get(0)); // 输出: Java
      
  • LinkedList
    • 基于双向链表实现。
    • 插入和删除效率高,但随机访问效率低。
    • 示例:
      List<String> list = new LinkedList<>();
      list.add("Java");
      list.add("Python");
      System.out.println(list.get(1)); // 输出: Python
      
  • Vector
    • 线程安全的动态数组。
    • 性能较低,通常被 ArrayList 取代。
(2) Set 接口的实现类
  • HashSet
    • 基于哈希表实现。
    • 无序且不允许重复元素。
    • 示例:
      Set<String> set = new HashSet<>();
      set.add("Java");
      set.add("Python");
      set.add("Java"); // 重复元素不会被添加
      System.out.println(set); // 输出: [Java, Python]
      
  • LinkedHashSet
    • 基于哈希表和链表实现。
    • 保留插入顺序。
  • TreeSet
    • 基于红黑树实现。
    • 元素按自然顺序或自定义顺序排序。
    • 示例:
      Set<String> set = new TreeSet<>();
      set.add("Java");
      set.add("Python");
      System.out.println(set); // 输出: [Java, Python](按字母顺序排序)
      
(3) Queue 接口的实现类
  • LinkedList
    • 可以用作队列或双端队列(Deque)。
  • PriorityQueue
    • 基于优先级堆实现。
    • 元素按优先级排序。
    • 示例:
      Queue<Integer> queue = new PriorityQueue<>();
      queue.add(5);
      queue.add(1);
      queue.add(3);
      System.out.println(queue.poll()); // 输出: 1(优先级最高)
      
(4) Map 接口的实现类
  • HashMap
    • 基于哈希表实现。
    • 键值对无序,允许 null 键和 null 值。
    • 示例:
      Map<String, Integer> map = new HashMap<>();
      map.put("Java", 1);
      map.put("Python", 2);
      System.out.println(map.get("Java")); // 输出: 1
      
  • LinkedHashMap
    • 保留插入顺序或访问顺序。
  • TreeMap
    • 基于红黑树实现。
    • 键按自然顺序或自定义顺序排序。
    • 示例:
      Map<String, Integer> map = new TreeMap<>();
      map.put("Java", 1);
      map.put("Python", 2);
      System.out.println(map); // 输出: {Java=1, Python=2}(按字母顺序排序)
      
  • Hashtable
    • 线程安全的哈希表。
    • 性能较低,通常被 HashMap 取代。

3. 集合框架的工具类

  • Collections
    • 提供静态方法用于操作集合(如排序、查找、反转)。
    • 示例:
      List<Integer> list = new ArrayList<>();
      list.add(3);
      list.add(1);
      list.add(2);
      Collections.sort(list);
      System.out.println(list); // 输出: [1, 2, 3]
      
  • Arrays
    • 提供静态方法用于操作数组(如排序、查找)。
    • 示例:
      int[] array = {3, 1, 2};
      Arrays.sort(array);
      System.out.println(Arrays.toString(array)); // 输出: [1, 2, 3]
      

4. 集合框架的遍历

  • Iterator
    • 用于遍历集合。
    • 示例:
      List<String> list = new ArrayList<>();
      list.add("Java");
      list.add("Python");
      Iterator<String> iterator = list.iterator();
      while (iterator.hasNext()) {
          System.out.println(iterator.next());
      }
      
  • 增强 for 循环
    • 示例:
      for (String item : list) {
          System.out.println(item);
      }
      
  • forEach 方法
    • 示例:
      list.forEach(item -> System.out.println(item));
      

5. 集合框架的线程安全

  • VectorHashtable
    • 线程安全,但性能较低。
  • Collections.synchronizedList
    • 将非线程安全的集合转换为线程安全的集合。
    • 示例:
      List<String> list = Collections.synchronizedList(new ArrayList<>());
      
  • ConcurrentHashMap
    • 高效的线程安全哈希表。
  • CopyOnWriteArrayList
    • 线程安全的 List,适用于读多写少的场景。

6. 集合框架的性能对比

集合类数据结构插入/删除性能随机访问性能是否有序是否允许重复
ArrayList动态数组
LinkedList双向链表
HashSet哈希表-
TreeSet红黑树-
HashMap哈希表-键不重复
TreeMap红黑树-键不重复

总结

Java 集合框架提供了丰富的数据结构和算法,能够满足大多数开发需求。通过合理选择集合类,可以显著提高程序的性能和可维护性。掌握集合框架的核心接口、实现类及其特性,是 Java 开发者的必备技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值