Java中的集合框架详解
今天我们来详细了解Java中的集合框架。Java集合框架提供了一组接口和类,用于存储和操作一组对象。集合框架包括List、Set、Queue和Map等主要接口,以及ArrayList、HashSet、LinkedList、HashMap等常用实现类。
1. 集合框架概述
Java集合框架是一个层次化的接口和类的集合,用于表示和操作集合。它包含以下几个主要接口:
- Collection:根接口,提供基本操作的集合。
- List:有序集合,允许重复元素。
- Set:无序集合,不允许重复元素。
- Queue:队列,通常按FIFO(先进先出)顺序存储元素。
- Map:键值对集合,不属于Collection接口,但也是集合框架的重要组成部分。
2. List接口及其实现
List接口是有序集合,允许重复元素。常用的实现类有ArrayList和LinkedList。
ArrayList
ArrayList是一个可调整大小的数组,支持快速随机访问。
package cn.juwatech.collections;
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println("List elements:");
for (String fruit : list) {
System.out.println(fruit);
}
System.out.println("Element at index 1: " + list.get(1));
list.remove(1);
System.out.println("List after removal: " + list);
}
}
LinkedList
LinkedList是一个双向链表,适合频繁插入和删除操作。
package cn.juwatech.collections;
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
list.add("Dog");
list.add("Cat");
list.add("Cow");
System.out.println("List elements:");
for (String animal : list) {
System.out.println(animal);
}
list.add(1, "Lion");
System.out.println("List after insertion: " + list);
list.remove("Cat");
System.out.println("List after removal: " + list);
}
}
3. Set接口及其实现
Set接口是不允许重复元素的集合。常用的实现类有HashSet、LinkedHashSet和TreeSet。
HashSet
HashSet是一个不保证顺序的集合,基于哈希表实现。
package cn.juwatech.collections;
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Red");
set.add("Green");
set.add("Blue");
set.add("Red"); // 重复元素不会被添加
System.out.println("Set elements:");
for (String color : set) {
System.out.println(color);
}
set.remove("Green");
System.out.println("Set after removal: " + set);
}
}
LinkedHashSet
LinkedHashSet是一个有序版本的HashSet,按插入顺序保存元素。
package cn.juwatech.collections;
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("One");
set.add("Two");
set.add("Three");
System.out.println("Set elements:");
for (String number : set) {
System.out.println(number);
}
set.remove("Two");
System.out.println("Set after removal: " + set);
}
}
TreeSet
TreeSet是一个有序集合,基于红黑树实现,按自然顺序排序。
package cn.juwatech.collections;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("Banana");
set.add("Apple");
set.add("Mango");
System.out.println("Set elements:");
for (String fruit : set) {
System.out.println(fruit);
}
set.remove("Apple");
System.out.println("Set after removal: " + set);
}
}
4. Queue接口及其实现
Queue接口表示队列,常用的实现类有LinkedList和PriorityQueue。
LinkedList作为Queue
LinkedList可以用作队列,实现FIFO(先进先出)操作。
package cn.juwatech.collections;
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListQueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.add("First");
queue.add("Second");
queue.add("Third");
System.out.println("Queue elements:");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}
PriorityQueue
PriorityQueue是一个优先级队列,元素按自然顺序或指定的比较器顺序排列。
package cn.juwatech.collections;
import java.util.PriorityQueue;
import java.util.Queue;
public class PriorityQueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new PriorityQueue<>();
queue.add(10);
queue.add(20);
queue.add(15);
System.out.println("Queue elements:");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}
5. Map接口及其实现
Map接口是一个键值对集合,常用的实现类有HashMap、LinkedHashMap和TreeMap。
HashMap
HashMap是一个基于哈希表实现的键值对集合,不保证顺序。
package cn.juwatech.collections;
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 35);
System.out.println("Map elements:");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
map.remove("Bob");
System.out.println("Map after removal: " + map);
}
}
LinkedHashMap
LinkedHashMap是一个有序版本的HashMap,按插入顺序保存键值对。
package cn.juwatech.collections;
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new LinkedHashMap<>();
map.put("X", 100);
map.put("Y", 200);
map.put("Z", 300);
System.out.println("Map elements:");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
map.remove("Y");
System.out.println("Map after removal: " + map);
}
}
TreeMap
TreeMap是一个有序的键值对集合,基于红黑树实现,按自然顺序或指定的比较器顺序排列键值对。
package cn.juwatech.collections;
import java.util.Map;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("C", 300);
map.put("A", 100);
map.put("B", 200);
System.out.println("Map elements:");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
map.remove("A");
System.out.println("Map after removal: " + map);
}
}
通过上述内容,我们详细介绍了Java中的集合框架,包括List、Set、Queue和Map的基本概念及其常用实现类的具体使用方法。通过这些示例代码,希望大家能够更好地理解和应用Java集合框架。