在 Java 中,List
、Set
和 Map
是三种常见的集合接口,它们有不同的特性和使用场景。以下是它们之间的主要区别:
1. List
- 定义:
List
是一种有序的集合,允许包含重复的元素。 - 实现类:常见实现类有
ArrayList
、LinkedList
、Vector
等。 - 特点:
- 元素按插入顺序排列。
- 可以通过索引访问元素。
- 允许添加重复的元素。
- 常用方法:
add(E e)
:添加元素。get(int index)
:通过索引获取元素。remove(int index)
:通过索引移除元素。size()
:返回列表中元素的数量。
示例代码:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("A");
System.out.println(list); // 输出: [A, B, A]
2. Set
- 定义:
Set
是一种不允许包含重复元素的集合,集合中的元素是无序的。 - 实现类:常见实现类有
HashSet
、LinkedHashSet
、TreeSet
等。 - 特点:
- 不允许添加重复的元素。
- 元素没有特定的顺序。
TreeSet
会按照元素的自然顺序排序,LinkedHashSet
会按照插入顺序排序。
- 常用方法:
add(E e)
:添加元素,若元素已存在则添加失败。remove(Object o)
:移除指定的元素。contains(Object o)
:判断集合中是否包含指定元素。size()
:返回集合中元素的数量。
示例代码:
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A");
System.out.println(set); // 输出: [A, B],重复的 "A" 只会保留一个
3. Map
- 定义:
Map
是一种键值对(key-value)映射的集合,每个键最多只能映射到一个值。 - 实现类:常见实现类有
HashMap
、LinkedHashMap
、TreeMap
等。 - 特点:
- 键是唯一的,不允许重复。
- 允许值重复。
TreeMap
会按照键的自然顺序排序,LinkedHashMap
会按照插入顺序排序。
- 常用方法:
put(K key, V value)
:添加键值对。get(Object key)
:通过键获取对应的值。remove(Object key)
:通过键移除键值对。containsKey(Object key)
:判断 Map 中是否包含指定的键。size()
:返回 Map 中键值对的数量。
示例代码:
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("A", 3); // 键 "A" 的值会被更新为 3
System.out.println(map); // 输出: {A=3, B=2}
总结
- List:有序且允许重复元素的集合,通过索引访问元素。
- Set:无序且不允许重复元素的集合,通过元素内容判断唯一性。
- Map:键值对映射的集合,键唯一且通过键访问值。
选择合适的集合类型应根据具体需求来决定。