← 返回首页

Java集合框架:数据结构的Java实现

📂 java ⏱ 2 min 280 words

Java集合框架:数据结构的Java实现

概述

Java集合框架提供了一套完整的数据结构和算法实现,是Java编程中最重要的基础设施之一。它包括List、Set、Map等接口及其实现类。

1. List接口

import java.util.*;

// ArrayList:动态数组,随机访问快
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
arrayList.add("C++");
System.out.println(arrayList.get(0));  // Java

// LinkedList:双向链表,插入删除快
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("First");
linkedList.addFirst("Before First");
linkedList.addLast("Last");

2. Set接口

// HashSet:无序,不允许重复
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple");  // 不会添加
System.out.println(hashSet.size());  // 2

// TreeSet:有序,基于红黑树
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(2);
System.out.println(treeSet);  // [1, 2, 3]

3. Map接口

// HashMap:最常用的Map实现
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Java", 1);
hashMap.put("Python", 2);
hashMap.put("C++", 3);
Integer value = hashMap.get("Java");  // 1

// TreeMap:按key排序
TreeMap<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Banana", 2);
treeMap.put("Apple", 1);
treeMap.put("Cherry", 3);

4. 集合遍历

List<String> list = Arrays.asList("Java", "Python", "C++");

// 方式1:for-each循环
for (String item : list) {
    System.out.println(item);
}

// 方式2:Iterator
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

// 方式3:Stream API
list.stream()
    .filter(s -> s.length() > 2)
    .forEach(System.out::println);

// Map遍历
Map<String, Integer> map = new HashMap<>();
map.put("Java", 1);

// entrySet遍历
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

5. Collections工具类

import java.util.Collections;

List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6));

Collections.sort(list);           // 排序
Collections.reverse(list);        // 反转
Collections.shuffle(list);        // 随机排序
int max = Collections.max(list);  // 最大值
int min = Collections.min(list);  // 最小值
Collections.swap(list, 0, 1);    // 交换元素

// 不可修改集合
List<String> unmodifiable = Collections.unmodifiableList(list);

6. Queue和Deque

// Queue接口
Queue<String> queue = new LinkedList<>();
queue.offer("First");
queue.offer("Second");
String head = queue.poll();  // First

// Deque接口(双端队列)
Deque<String> deque = new ArrayDeque<>();
deque.push("Top");
deque.push("Middle");
String top = deque.pop();  // Middle

// 栈实现
Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.push(2);
int top2 = stack.pop();  // 2

最佳实践

  1. 选择合适的集合:根据使用场景选择List/Set/Map
  2. 初始化集合大小:避免频繁扩容
  3. 使用接口类型声明:List list = new ArrayList<>()
  4. 线程安全考虑:多线程环境使用CopyOnWriteArrayList等
  5. 使用不可变集合:返回值使用Collections.unmodifiableList()

总结

Java集合框架是Java编程的核心组件,掌握各种集合的特点和使用场景,可以帮助你高效地处理数据。合理选择和使用集合,是编写高质量Java代码的基础。