文章目录
- List
-
- [List 接口的特点](#List 接口的特点)
- [List 接口的主要方法](#List 接口的主要方法)
- [List 接口的实现类](#List 接口的实现类)
- 示例
- Map
-
- [Map 接口的特点](#Map 接口的特点)
- [Map 接口的主要方法](#Map 接口的主要方法)
- [Map 接口的实现类](#Map 接口的实现类)
- 示例
- Queue
-
- [Queue 接口的特点](#Queue 接口的特点)
- [Queue 接口的主要方法](#Queue 接口的主要方法)
- [Queue 接口的实现类](#Queue 接口的实现类)
- 示例
List
List是Collections Framework 的一部分,用于表示一个有序集合,可以包含重复的元素。List 接口位于 java.util 包中,继承自 Collection 接口。List 接口提供了多种方法来操作集合中的元素,包括添加、删除、获取和更新等。
List 接口的特点
- 有序性:List 中的元素按照一定的顺序排列,每个元素都有其对应的索引位置,索引从 0 开始。
- 可重复性:List 中可以包含重复的元素,即同一个元素可以多次出现在 List 中。
- 插入和访问:List 接口提供了基于索引的操作,可以快速地通过索引来访问、添加、修改和删除元素。
List 接口的主要方法
List 接口提供了一系列方法来操作集合:
- add(E element): 在列表末尾添加一个元素。
- add(int index, E element): 在列表的指定位置插入一个元素。
- remove(int index): 移除列表中指定位置的元素。
- remove(Object element): 移除列表中首次出现的指定元素。
- get(int index): 返回列表中指定位置的元素。
- set(int index, E element): 替换列表中指定位置的元素。
- size(): 返回列表中的元素数量。
- isEmpty(): 判断列表是否为空。
- contains(Object element): 判断列表是否包含指定元素。
- indexOf(Object element): 返回列表中首次出现的指定元素的索引,如果不存在则返回-1。
- lastIndexOf(Object element): 返回列表中最后出现的指定元素的索引,如果不存在则返回-1。
- subList(int fromIndex, int toIndex): 返回列表中从fromIndex到toIndex-1位置的子列表视图。
- clear(): 移除列表中的所有元素。
- toArray(): 将列表转换为数组。
List 接口的实现类
List 接口有多个实现类,其中最常用的是 ArrayList 和 LinkedList:
- ArrayList:基于动态数组实现,提供了快速的随机访问性能,但在列表中间插入和删除元素较慢。
- LinkedList:基于双向链表实现,提供了快速的插入和删除性能,特别是在列表的开始和结束位置,但在随机访问方面较慢。
示例
以下是如何在 Java 中使用 List 接口的一个简单示例:
java
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
// 创建一个 ArrayList 实例
List<String> list = new ArrayList<>();
// 添加元素
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 通过索引访问元素
System.out.println("Index 1: " + list.get(1)); // 输出: Index 1: Banana
// 修改元素
list.set(1, "Grape");
// 删除元素
list.remove(0); // 移除索引为 0 的元素(Apple)
// 遍历列表
for (String fruit : list) {
System.out.println(fruit);
}
}
}
Map
Map是一个接口,它用于存储键值对(key-value pairs)的集合。Map中的每个键都是唯一的,而值可以重复。Map接口提供了一系列方法来操作键值对,包括添加、删除、获取和更新等。
Map 接口的特点
- 键的唯一性:Map中的每个键都映射到一个唯一的值。如果尝试插入一个已经存在的键,那么与该键关联的值将被更新。
- 无序性:Map接口本身不保证键值对的顺序。如果需要顺序,可以使用SortedMap接口或LinkedHashMap类。
- 键值对操作:Map提供了多种方法来操作键值对,如根据键获取值、添加键值对、删除键值对等。
Map 接口的主要方法
Map接口提供了一系列方法来操作键值对:
- put(K key, V value): 添加或更新键值对。
- get(Object key): 根据键获取对应的值,如果键不存在则返回null。
- remove(Object key): 移除键值对,并返回与键关联的值,如果键不存在则返回null。
- containsKey(Object key): 判断是否包含指定的键。
- containsValue(Object value): 判断是否包含指定的值。
- size(): 返回Map中的键值对数量。
- isEmpty(): 判断Map是否为空。
- clear(): 移除所有键值对。
- keySet(): 返回Map中所有键的集合视图。
- values(): 返回Map中所有值的集合视图。
- entrySet(): 返回Map中所有键值对的集合视图。
Map 接口的实现类
Map接口有多个实现类,其中最常用的是HashMap、TreeMap和LinkedHashMap:
- HashMap:基于哈希表实现,提供了快速的键值对操作性能。它不保证顺序,并且允许使用null作为键和值。
- TreeMap:基于红黑树实现,是一个有序的Map实现,根据键的自然顺序或自定义比较器进行排序。
- LinkedHashMap:继承自HashMap,它维护了一个双向链表,用于维护键值对的插入顺序。
示例
以下是如何在Java中使用Map接口的一个简单示例:
java
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
// 创建一个HashMap实例
Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
// 根据键获取值
System.out.println("Banana: " + map.get("Banana")); // 输出: Banana: 2
// 判断是否包含键
System.out.println("Contains Apple: " + map.containsKey("Apple")); // 输出: Contains Apple: true
// 删除键值对
map.remove("Apple");
// 遍历Map
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
Queue
Queue是一个接口,它继承自Collection接口,用于模拟队列数据结构。队列是一种先进先出(FIFO)的数据结构,即元素按照它们被添加的顺序被移除。Queue接口提供了一系列方法来操作队列,包括添加、删除、检查等。
Queue 接口的特点
- 先进先出:队列中的元素按照它们被添加的顺序被移除。队列的头部是队列中存在时间最长的元素,而尾部是队列中存在时间最短的元素。
- 可选操作:Queue接口允许某些操作,如插入、删除和检查,可能会抛出异常,也允许这些操作返回特殊值(如null或false)而不抛出异常。
Queue 接口的主要方法
Queue接口提供了一系列方法来操作队列:
- add(E element): 添加一个元素到队列的尾部,如果队列已满,则抛出IllegalStateException。
- offer(E element): 添加一个元素到队列的尾部,如果队列已满,则返回false。
- remove(): 移除并返回队列头部的元素,如果队列为空,则抛出NoSuchElementException。
- poll(): 移除并返回队列头部的元素,如果队列为空,则返回null。
- element(): 返回队列头部的元素,但不移除,如果队列为空,则抛出NoSuchElementException。
- peek(): 返回队列头部的元素,但不移除,如果队列为空,则返回null。
- size(): 返回队列中的元素数量。
- isEmpty(): 判断队列是否为空。
- contains(Object element): 判断队列是否包含指定的元素。
Queue 接口的实现类
Queue接口有多个实现类,其中最常用的是LinkedList和PriorityQueue:
- LinkedList:基于链表实现,可以作为队列或双端队列使用。
- PriorityQueue:基于优先级堆实现,是一个无界优先队列,元素根据其自然顺序或者自定义比较器进行排序。
示例
以下是如何在Java中使用Queue接口的一个简单示例:
java
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// 创建一个 LinkedList 实例作为 Queue
Queue<String> queue = new LinkedList<>();
// 添加元素到队列
queue.add("Apple");
queue.offer("Banana");
queue.offer("Cherry");
// 移除并返回队列头部的元素
System.out.println("Removed: " + queue.remove()); // 输出: Removed: Apple
System.out.println("Peeked: " + queue.peek()); // 输出: Peeked: Banana
// 遍历队列
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}