joken-前端工程师

  博客园 :: 首页 :: 新随笔 :: :: :: 管理 ::

在 Java 中,常见的数据结构主要由 Java Collections Framework(JCF) 提供,它是 Java 标准库的一部分,位于 java.util 包中。以下是常见的几种数据结构及其对应的 API,以及它们的主要特点和使用场景:


1. List(列表)

  • 特点:有序、可重复的元素集合,支持按索引访问。
  • 常用实现类
    • ArrayList:基于动态数组,查询快,增删慢。
    • LinkedList:基于双向链表,增删快,查询慢。
  • 常用方法
    • add(E e):添加元素到列表末尾。
    • add(int index, E element):在指定位置添加元素。
    • get(int index):获取指定位置的元素。
    • remove(int index):删除指定位置的元素。
    • size():返回列表大小。
    • contains(Object o):判断是否包含某元素。
  • 示例
    List<String> list = new ArrayList<>();
    list.add("Apple");
    list.add("Banana");
    System.out.println(list.get(0)); // 输出: Apple
    

2. Set(集合)

  • 特点:无序、不允许重复的元素集合。
  • 常用实现类
    • HashSet:基于哈希表,性能高,无序。
    • TreeSet:基于红黑树,有序(自然顺序或自定义顺序)。
    • LinkedHashSet:基于哈希表和链表,保持插入顺序。
  • 常用方法
    • add(E e):添加元素(重复元素会被忽略)。
    • remove(Object o):删除指定元素。
    • contains(Object o):检查是否包含某元素。
    • size():返回集合大小。
  • 示例
    Set<String> set = new HashSet<>();
    set.add("Apple");
    set.add("Apple"); // 重复添加无效
    System.out.println(set.size()); // 输出: 1
    

3. Map(映射)

  • 特点:键值对集合,键唯一,值可重复。
  • 常用实现类
    • HashMap:基于哈希表,键值无序,允许 null。
    • TreeMap:基于红黑树,按键排序。
    • LinkedHashMap:基于哈希表和链表,保持插入顺序。
  • 常用方法
    • put(K key, V value):添加键值对。
    • get(Object key):根据键获取值。
    • remove(Object key):删除指定键的键值对。
    • containsKey(Object key):检查是否包含某键。
    • keySet():返回所有键的集合。
    • values():返回所有值的集合。
  • 示例
    Map<String, Integer> map = new HashMap<>();
    map.put("Apple", 1);
    map.put("Banana", 2);
    System.out.println(map.get("Apple")); // 输出: 1
    

4. Queue(队列)

  • 特点:先进先出(FIFO)的数据结构。
  • 常用实现类
    • LinkedList:既是 List,也是 Queue。
    • PriorityQueue:优先级队列,基于堆,按优先级排序。
  • 常用方法
    • add(E e):添加元素到队列尾部。
    • offer(E e):添加元素(更安全,不会抛异常)。
    • poll():移除并返回队列头部元素。
    • peek():查看队列头部元素但不移除。
  • 示例
    Queue<String> queue = new LinkedList<>();
    queue.offer("Apple");
    queue.offer("Banana");
    System.out.println(queue.poll()); // 输出: Apple
    

5. Deque(双端队列)

  • 特点:可以在两端插入和删除元素。
  • 常用实现类
    • ArrayDeque:基于数组的高效双端队列。
    • LinkedList:也实现了 Deque 接口。
  • 常用方法
    • addFirst(E e):在头部添加元素。
    • addLast(E e):在尾部添加元素。
    • pollFirst():移除并返回头部元素。
    • pollLast():移除并返回尾部元素。
  • 示例
    Deque<String> deque = new ArrayDeque<>();
    deque.addFirst("Apple");
    deque.addLast("Banana");
    System.out.println(deque.pollFirst()); // 输出: Apple
    

6. Stack(栈)

  • 特点:后进先出(LIFO)的数据结构。
  • 实现类Stack(旧类,继承自 Vector),推荐使用 Deque 的实现(如 ArrayDeque)。
  • 常用方法
    • push(E e):压入元素到栈顶。
    • pop():弹出栈顶元素。
    • peek():查看栈顶元素但不移除。
  • 示例
    Deque<String> stack = new ArrayDeque<>();
    stack.push("Apple");
    stack.push("Banana");
    System.out.println(stack.pop()); // 输出: Banana
    

7. 其他工具类

  • Collections:提供对集合操作的静态方法。
    • Collections.sort(List<T> list):对列表排序。
    • Collections.reverse(List<?> list):反转列表。
    • Collections.shuffle(List<?> list):随机打乱列表。
  • 示例
    List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 2));
    Collections.sort(numbers);
    System.out.println(numbers); // 输出: [1, 2, 3]
    

总结

数据结构 接口/类 特点 使用场景
List ArrayList, LinkedList 有序、可重复 顺序访问、动态数组或链表
Set HashSet, TreeSet 无序、不重复 去重、有序集合
Map HashMap, TreeMap 键值对、键唯一 键值映射、查找
Queue LinkedList, PriorityQueue FIFO 任务调度、优先级处理
Deque ArrayDeque 双端操作 双端队列、栈
Stack ArrayDeque LIFO 递归、表达式求值
posted on 2025-02-22 22:01  joken1310  阅读(85)  评论(0)    收藏  举报