在 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 | 递归、表达式求值 |
前端工程师、程序员

浙公网安备 33010602011771号