特点概述:
List
、Set
和 Map
是 Java 中三个常见的集合框架。
-
List
: 有序集合,元素可以重复。提供索引访问方式,可以根据索引值获取或者设置集合中存储的元素,可以插入多个null元素,实现类有ArrayList
,LinkedList
和Vector
等。 -
Set
: 唯一性元素的无序集合。如果试图将相同的元素添加到 Set 中,则会被判定为无效操作。只允许存入一个null元素,实现类有HashSet
(基于散列表实现)和TreeSet
(基于红黑树实现)等。 -
Map
: 键值对映射集合。每个元素关联唯一的键,可以通过键来访问元素,Key无序,唯一;value 不要求有序,允许重复。例如HashMap
(基于散列表实现)和TreeMap
(基于红黑树实现)等。
在选择使用哪种集合类型时,需要考虑自己应用的具体需要:
-
如果需要维护元素的顺序,并且可能出现重复的元素,就应该使用 List 集合;
-
如果需要维护元素的唯一性,并且没有特别的顺序需求,就应该使用 Set 集合;
-
如果需要维护一组键值对,并且每个键都唯一地对应一个值,就应该使用 Map 集合。
常见应用场景:
List 是一个有序集合,元素可以重复。使用 List 可以按照插入顺序存储数据,并且能够通过索引访问元素。List 通常用于需要按顺序访问集合元素的场景,例如:
- 存储用户输入的历史记录
- 存储系统日志事件
- 存储动态数组,比如存储图像像素值等
Set 是一个不允许重复元素的无序集合。当试图将相同的元素添加到 Set 中时,后续的操作会被判定为无效操作。Set 常用于需要元素唯一性的场景,例如:
- 存储个人信息,每个人的身份证号作为唯一标识
- 去重操作,例如统计某个网站的独立访客数
- 判断一个元素是否属于某个集合
Map 是一种键值对映射集合,每个元素关联唯一的键,可以通过键来访问元素。Map 常用于需要按照键值进行查找、插入或删除操作的场景,例如:
- 存储用户信息,以用户id为键
- 存储某个单词在文本中出现的次数,以该单词为键
- 实现缓存机制,以url为键来缓存网页内容