面试题答案
一键面试List容器
- 适用场景
- 需要保证元素顺序:例如展示用户操作历史记录,按操作时间先后顺序存储,此时需要元素顺序得以保留。
- 允许重复元素:如统计网站访问者IP,同一个IP可能多次访问,需要存储重复IP。
- 独特优势
- 顺序性:能按照元素添加顺序或指定顺序维护元素,便于按顺序遍历和操作。
- 丰富的索引操作:可以通过索引快速访问和修改元素,如
list.get(index)
。
- 合适的实现类
- ArrayList:
- 原因:基于数组实现,随机访问效率高,适合频繁查询操作。若数据量可预估且主要操作是查询,
ArrayList
是较好选择。例如实现一个学生成绩查询系统,学生数量相对稳定且查询频繁,使用ArrayList
存储学生成绩信息可快速定位查询。
- 原因:基于数组实现,随机访问效率高,适合频繁查询操作。若数据量可预估且主要操作是查询,
- LinkedList:
- 原因:基于链表实现,插入和删除操作效率高,特别是在列表中间位置进行插入和删除。如实现一个任务调度系统,任务可能随时插入到任务队列中间位置执行,
LinkedList
能高效处理此类操作。
- 原因:基于链表实现,插入和删除操作效率高,特别是在列表中间位置进行插入和删除。如实现一个任务调度系统,任务可能随时插入到任务队列中间位置执行,
- ArrayList:
Set容器
- 适用场景
- 保证元素唯一性:例如统计一篇文章中出现的不同单词,不希望重复统计相同单词。
- 独特优势
- 唯一性:自动去除重复元素,无需额外逻辑判断元素是否重复。
- 不同实现类特点
- HashSet:
- 特点:基于哈希表实现,插入、查找和删除操作平均时间复杂度为O(1),效率较高。但元素无序,存储顺序和取出顺序可能不一致。适合在需要快速判断元素是否存在且不关心元素顺序场景使用,如统计网站不同访客IP,只关心哪些IP访问过,不关心其访问顺序。
- TreeSet:
- 特点:基于红黑树实现,元素有序(自然顺序或自定义顺序)。插入、查找和删除操作时间复杂度为O(log n)。适用于需要对元素进行排序且保证唯一性场景,如实现一个成绩排名系统,存储学生成绩时要保证成绩唯一且按成绩高低排序,
TreeSet
可满足需求。
- 特点:基于红黑树实现,元素有序(自然顺序或自定义顺序)。插入、查找和删除操作时间复杂度为O(log n)。适用于需要对元素进行排序且保证唯一性场景,如实现一个成绩排名系统,存储学生成绩时要保证成绩唯一且按成绩高低排序,
- LinkedHashSet:
- 特点:继承自
HashSet
,同时维护插入顺序或访问顺序。插入、查找和删除操作性能与HashSet
相近,因为底层同样基于哈希表。适用于既需要保证元素唯一性又需要维护插入顺序场景,如记录用户访问页面顺序,且不重复记录已访问页面。
- 特点:继承自
- HashSet: