Java集合的体系框架
Java集合体系框架(Java Collection Framework)是Java编程语言中用于存储和操作数据的一组接口和类的层次结构。它是Java集合框架的核心部分,提供了统一的编程接口和标准化的数据结构。
Java集合体系框架的结构如下:
-
接口(Interfaces):
(1):Collection:是最基本的集合接口,表示一组对象的集合。它派生了两个子接口:List和Set。
·List:有序集合,允许重复元素。常见的实现类有ArrayList、LinkedList和Vector。
·Set:无序集合,不允许重复元素。常见的实现类有HashSet、LinkedHashSet和TreeSet。
(2):Map:键值对的集合。常见的实现类有HashMap、LinkedHashMap和TreeMap。 -
类(Classes):
(1):AbstractCollection:Collection接口的抽象实现类,提供了一些公共的方法实现。
(2):AbstractList:List接口的抽象实现类,进一步提供了基于索引的操作。
(3):AbstractSet:Set接口的抽象实现类,进一步提供了不重复元素的操作。
(4):AbstractMap:Map接口的抽象实现类,提供了一些常用的方法实现。
(5):ArrayList:List接口的可调整大小的数组实现。
(6):LinkedList:List接口的双向链表实现。
(7):HashSet:Set接口的哈希表实现。
(8):LinkedHashSet:Set接口的链表和哈希表实现,保持插入顺序。
(9):HashMap:Map接口的哈希表实现。
(10):LinkedHashMap:Map接口的链表和哈希表实现,保持插入顺序。
(11):TreeMap:Map接口的红黑树实现,按照键的自然顺序进行排序。
(12):Vector:List接口的同步实现类,类似于ArrayList但线程安全。
(13):Hashtable:Map接口的同步实现类,类似于HashMap但线程安全。
此外,Java集合体系框架还提供了一些工具类,如Collections和Arrays,用于提供集合的实用方法和操作。
Collection集合
Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系,(注意:Map不是Collection的子接口)。
- List接口:
(1):List接口代表一个有序的集合,其中的元素可以重复。
(2):元素在List中存储的顺序是有意义的,并且可以通过索引进行访问和操作。
(3):List接口提供了对元素的插入、访问、更新和删除操作。
(4):常见的List实现类有ArrayList、LinkedList和Vector。ArrayList是基于动态数组的实现,适合快速的随机访问操作;LinkedList基于链表实现,适合插入和删除操作频繁的场景;Vector是线程安全的动态数组。 - Set接口:
(1):Set接口代表一个无序的集合,其中的元素不可重复。
(2):Set中的元素没有定义的顺序,并且不支持通过索引访问和操作。
(3):Set接口通常用于判断元素是否存在于集合中,以及去除重复元素。
(4):常见的Set实现类有HashSet、LinkedHashSet和TreeSet。HashSet基于哈希表实现,具有较快的查找速度;LinkedHashSet在HashSet的基础上保持了元素的插入顺序;TreeSet基于红黑树实现,可以对元素进行排序。 - Queue口:
(1):Queue接口代表一种队列的数据结构,元素按照先进先出(FIFO)的顺序进行插入和删除。
(2):常见的Queue实现类有LinkedList、ArrayDeque和PriorityQueue。LinkedList实现了Queue接口,并且支持双向链表结构;ArrayDeque是基于循环数组实现的双端队列;PriorityQueue是基于堆数据结构实现的,可以根据元素的优先级进行排序。
Map集合
Map集合是Java集合框架中的一种键值对(key-value)存储结构。不同于其他集合类型,Map集合中的元素是成对存在的,其中一个元素作为键(key),另一个元素作为值(value),它们之间存在映射关系。
Map集合的特点
- 键是唯一的:每个键在Map中是唯一的,不能重复。与键关联的值可以重复。
- 键和值之间是一对一的映射关系:每个键与一个值相关联,通过键可以快速找到对应的值。
- 不保留固定的顺序:Map集合通常不保证键值对的顺序,它根据具体的实现类而定。
在Java中,Map集合是通过Map接口来定义的。Map接口提供了一系列用于操作和管理键值对的方法,如添加、获取、删除和遍历等操作。
常见的Map接口的实现类:
- HashMap:使用哈希表实现,其插入、访问、删除操作的时间复杂度都是 O(1)。
- TreeMap:基于红黑树实现,会根据键的自然顺序或者自定义的比较器对键进行有序存储。
- LinkedHashMap:按照插入顺序或访问顺序维护键值对的双向链表,同时由哈希表支持快速的查找。
- Hashtable:是一个古老的实现类,线程安全,但性能较低。通常不建议在新代码中使用。
- ConcurrentHashMap:线程安全的哈希表实现,具备高并发性能。
以下是一些常用的Map集合操作:
- put(key, value):将指定的键值对添加到Map集合中。
- get(key):根据键获取对应的值。
- containsKey(key):检查Map中是否包含指定的键。
- containsValue(value):检查Map中是否包含指定的值。
- remove(key):根据键移除对应的键值对。
- keySet():返回Map中所有键的集合。
- values():返回Map中所有值的集合。
- entrySet():返回Map中所有键值对的集合。
使用HashMap实现Map集合的示例:
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", 5);
map.put("banana", 3);
map.put("orange", 8);
// 根据键获取值
int appleCount = map.get("apple");
System.out.println("Number of apples: " + appleCount);
// 遍历Map集合
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String fruit = entry.getKey();
int count = entry.getValue();
System.out.println(fruit + " : " + count);
}
// 检查是否包含指定的键
boolean containsKey = map.containsKey("apple");
System.out.println("Contains apple: " + containsKey);
// 移除指定的键值对
map.remove("banana");
// 清空Map集合
map.clear();
}
}