Java集合框架详解:从ArrayList到HashMap
今天我们来聊聊Java集合框架,从ArrayList到HashMap,详细解析它们的用法和特点。
一、ArrayList详解
ArrayList是Java集合框架中的一个动态数组实现,提供了可变大小的数组功能。它继承了AbstractList,并实现了List接口。以下是一个简单的ArrayList使用示例:
import cn.juwatech.collections.ArrayListDemo;
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 访问元素
System.out.println("First element: " + list.get(0));
// 遍历元素
System.out.println("All elements:");
for (String fruit : list) {
System.out.println(fruit);
}
// 删除元素
list.remove("Banana");
System.out.println("After removal:");
for (String fruit : list) {
System.out.println(fruit);
}
}
}
ArrayList的优点是支持随机访问,效率高;缺点是插入和删除元素时可能需要移动大量元素,效率较低。
二、LinkedList详解
LinkedList是一个双向链表实现,继承了AbstractSequentialList,并实现了List和Deque接口。适合频繁插入和删除操作的场景。以下是一个LinkedList的使用示例:
import cn.juwatech.collections.LinkedListDemo;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 添加元素
list.add("Dog");
list.add("Cat");
list.add("Rabbit");
// 访问元素
System.out.println("First element: " + list.getFirst());
// 遍历元素
System.out.println("All elements:");
for (String animal : list) {
System.out.println(animal);
}
// 删除元素
list.remove("Cat");
System.out.println("After removal:");
for (String animal : list) {
System.out.println(animal);
}
}
}
LinkedList的优点是插入和删除元素效率高;缺点是随机访问效率低。
三、HashSet详解
HashSet是一个基于哈希表的Set集合,它不允许有重复的元素,并且不保证集合的迭代顺序。以下是一个HashSet的使用示例:
import cn.juwatech.collections.HashSetDemo;
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("Red");
set.add("Green");
set.add("Blue");
set.add("Red"); // 重复元素不会被添加
// 遍历元素
System.out.println("All elements:");
for (String color : set) {
System.out.println(color);
}
// 检查元素
System.out.println("Set contains 'Green': " + set.contains("Green"));
// 删除元素
set.remove("Green");
System.out.println("After removal:");
for (String color : set) {
System.out.println(color);
}
}
}
HashSet的优点是查找、插入和删除元素的效率高;缺点是不能保证元素的顺序。
四、TreeSet详解
TreeSet是一个基于红黑树的Set集合,保证元素的自然排序。以下是一个TreeSet的使用示例:
import cn.juwatech.collections.TreeSetDemo;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
// 添加元素
set.add("Orange");
set.add("Apple");
set.add("Banana");
// 遍历元素
System.out.println("All elements (sorted):");
for (String fruit : set) {
System.out.println(fruit);
}
// 检查元素
System.out.println("Set contains 'Apple': " + set.contains("Apple"));
// 删除元素
set.remove("Apple");
System.out.println("After removal:");
for (String fruit : set) {
System.out.println(fruit);
}
}
}
TreeSet的优点是保证元素有序;缺点是插入、删除和查找元素的效率比HashSet低。
五、HashMap详解
HashMap是一个基于哈希表的Map接口实现,允许键和值为null。它不保证映射的顺序,特别是它不保证顺序在随时间的变化。以下是一个HashMap的使用示例:
import cn.juwatech.collections.HashMapDemo;
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("Alice", 30);
map.put("Bob", 25);
map.put("Charlie", 35);
// 访问元素
System.out.println("Bob's age: " + map.get("Bob"));
// 遍历元素
System.out.println("All entries:");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 删除元素
map.remove("Charlie");
System.out.println("After removal:");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
HashMap的优点是查找、插入和删除键值对的效率高;缺点是不能保证键值对的顺序。
六、TreeMap详解
TreeMap是一个基于红黑树的Map接口实现,保证键的自然排序。以下是一个TreeMap的使用示例:
import cn.juwatech.collections.TreeMapDemo;
import java.util.Map;
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<>();
// 添加键值对
map.put("Orange", 5);
map.put("Apple", 3);
map.put("Banana", 2);
// 遍历元素
System.out.println("All entries (sorted):");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 检查元素
System.out.println("Map contains 'Apple': " + map.containsKey("Apple"));
// 删除元素
map.remove("Apple");
System.out.println("After removal:");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
TreeMap的优点是保证键的有序性;缺点是插入、删除和查找键值对的效率比HashMap低。