Java集合框架是Java提供的一组用于存储和操作数据的类和接口,主要分为两大体系:Collection和Map。下面详细介绍它们包含的主要接口和类以及继承关系。
1. Collection体系
Collection是单列集合的根接口,它定义了一些通用的方法,如添加、删除、遍历等。Collection体系又可以分为List、Set和Queue三个子接口。
主要接口
List:有序、可重复的集合,用户可以精确控制每个元素的插入位置。ArrayList:基于动态数组实现,支持随机访问,插入和删除操作效率较低。LinkedList:基于双向链表实现,插入和删除操作效率较高,随机访问效率较低。Vector:线程安全的动态数组,与ArrayList类似,但性能较低。Stack:继承自Vector,实现了栈的后进先出(LIFO)特性。
Set:无序、不可重复的集合。HashSet:基于哈希表实现,不保证元素的顺序。LinkedHashSet:继承自HashSet,基于哈希表和链表实现,保证元素的插入顺序。TreeSet:基于红黑树实现,保证元素按照自然顺序或指定的比较器顺序排序。
Queue:队列接口,遵循先进先出(FIFO)原则。LinkedList:除了实现List接口,还实现了Queue接口,可以作为队列使用。PriorityQueue:基于优先堆实现,元素按照自然顺序或指定的比较器顺序排序。
继承关系
java.lang.Object
└─ 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.LinkedList
└─ java.util.PriorityQueue
2. Map体系
Map是双列集合的根接口,用于存储键值对(key-value),键是唯一的。
主要接口和类
HashMap:基于哈希表实现,不保证键值对的顺序。LinkedHashMap:继承自HashMap,基于哈希表和链表实现,保证键值对的插入顺序。TreeMap:基于红黑树实现,保证键按照自然顺序或指定的比较器顺序排序。Hashtable:线程安全的哈希表,与HashMap类似,但性能较低。Properties:继承自Hashtable,用于处理属性文件,键和值都是字符串类型。
继承关系
java.lang.Object
└─ java.util.Map
├─ java.util.HashMap
│ └─ java.util.LinkedHashMap
├─ java.util.TreeMap
├─ java.util.Hashtable
│ └─ java.util.Properties
示例代码
import java.util.*;
public class CollectionExample {
public static void main(String[] args) {
// List示例
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
System.out.println("List: " + list);
// Set示例
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
System.out.println("Set: " + set);
// Queue示例
Queue<String> queue = new LinkedList<>();
queue.add("apple");
queue.add("banana");
System.out.println("Queue: " + queue);
// Map示例
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
System.out.println("Map: " + map);
}
}
通过上述代码,你可以看到如何使用Collection和Map体系中的不同接口和类。