Java 集合框架(Java Collection Framework,简称 JCF)是一个统一的架构,用于表示和操作集合,即对象的集合。它提供了一组接口和类,使处理对象集合变得更加容易。JCF 简化了常见的任务,如存储、搜索、排序和操作数据。
什么是 Java 集合?
Java 集合是一种预定义的架构,能够存储一组元素并像单个单元一样行为。集合可以存储和管理多个元素,并提供方法来添加、删除、搜索和排序元素。
什么是 Java 集合框架?
Java 集合框架提供了能力,使 Java 集合能够以类和接口的形式表示一组元素。集合框架使用户能够执行各种数据操作,如存储数据、搜索、排序、插入、删除和更新数据。
Java 集合框架层次结构
以下是 Java 集合框架的层次结构图:
java.util.Collection
|
+-- java.util.List
| |
| +-- java.util.ArrayList
| +-- java.util.LinkedList
| +-- java.util.Vector
| +-- java.util.Stack
|
+-- java.util.Set
| |
| +-- java.util.HashSet
| +-- java.util.LinkedHashSet
| +-- java.util.TreeSet
|
+-- java.util.Queue
|
+-- java.util.PriorityQueue
+-- java.util.Deque
|
+-- java.util.ArrayDeque
java.util.Map
|
+-- java.util.HashMap
+-- java.util.LinkedHashMap
+-- java.util.TreeMap
+-- java.util.IdentityHashMap
+-- java.util.WeakHashMap
+-- java.util.Hashtable
Java 集合接口方法
以下表格描述了 Java 集合中可用于数据操作的方法:
方法 | 描述 |
---|---|
add() |
向集合中添加对象 |
isEmpty() |
如果集合为空,返回 true |
clear() |
移除集合中的所有元素 |
remove() |
移除选定的对象 |
size() |
返回集合中的元素数量 |
stream() |
返回顺序元素 |
toArray() |
将元素以数组形式返回 |
hashCode() |
返回元素的哈希码 |
equals(obj) |
比较一个元素与集合 |
iterator() |
返回一个迭代器,用于遍历集合 |
max() |
返回集合中的最大值 |
contains() |
如果集合中存在特定值,返回 true |
spliterator() |
创建一个 Spliterator ,用于遍历集合中的元素 |
retainAll() |
保留集合中的元素 |
Java 集合接口及其实现类
Set 接口
Set
接口继承自 Collection
接口,不允许存储重复/冗余元素。
示例:
package Simplilearn;
import java.util.*;
public class SetExample {
public static void main(String args[]) {
int count[] = {
21, 23, 43, 53, 22, 65 };
Set<Integer> set = new HashSet<Integer>();
try {
for (int i = 0; i <= 5; i++) {
set.add(count[i]);
}
System.out.println(set);
TreeSet<Integer> sortedSet = new TreeSet<Integer>(set);
System.out.println("排序后的集合:");
System.out.println(sortedSet);
System.out.println("集合的第一个元素是: " + sortedSet.first());
System.out.println("集合的最后一个元素是: " + sortedSet.last());
} catch (Exception e) {
}
}
}
List 接口
List
接口派生自 java.util
包。List
允许用户通过索引方法维护有序的元素集合,并执行插入、更新、删除等数据操作。
示例:
package Simplilearn;
import java.util.*;
public class ListInterface {
public static void main(String args[]) {
List<String> list = new ArrayList<String>();
list.add("David");
list.add("Jhon");
list.add("Stacy");
for (String student : list)
System.out.println(student);
}
}
Queue 接口
Queue
接口继承自 Collection
接口。Queue
是一个线性集合,遵循 FIFO(先进先出)原则,支持数据操作。
示例:
package Simplilearn;
import java.util.*;
public class QueueInterface {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Mango");
queue.add("Grapes");
queue.add("Banana");
System.out.println(queue);
queue.remove("Grapes");
System.out.println(queue);
System.out.println("队列总大小: " + queue.size());
System.out.println("队列包含水果 'Apple'? : " + queue.contains("Apple"));
queue.clear();
}
}
Deque 接口
Deque
接口继承自 Collection
接口。Deque
表示双端队列,支持在队列的两端进行插入和删除操作。
示例:
package Simplilearn;
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeInterface {
public static void main(String[] args) {
Deque<Integer> num = new ArrayDeque<>();
num.offer(10);
num.offerLast(21);
num.offerFirst(52);
System.out.println("Deque 元素: " + num);
int first = num.peekFirst();
System.out.println("第一个元素是: " + first);
int lastElement = num.peekLast();
System.out.println("最后一个元素: " + lastElement);
int removed = num.pollFirst();
System.out.println("移除的第一个元素: " + removed);
System.out.println("更新后的 Deque: " + num);
}
}
Map 接口
Map
接口继承自 Collection
接口。Map
不能存储重复元素,使用键值对格式存储数据,通过访问键值对进行操作。
示例:
package Simplilearn;
import java.util.*;
import java.util.Map.Entry;
public class MapInterface {
public static void main(String args[]) {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Cricket");
map.put(2, "Hockey");
map.put(3, "Archery");
for (Iterator<Entry<Integer, String>> iterator = map.entrySet().iterator(); iterator.hasNext();) {
Entry<Integer, String> m = iterator.next();
System.out.println(m.getKey() + " " + m.getValue());
}
}
}
SortedSet 接口
SortedSet
接口维护按升序排列的映射关系,适用于自然有序的集合。
示例:
package Simplilearn;
import java.util.*;
public class SortedSetInterface