前言:笔者为21届应届毕业生,渣渣二本学校,昨天去面试的时候面试官问了我这个问题。当时有点懵圈了,因为平时在项目中只是使用它们,并没有深入了解三者的具体区别。因此,我记录一下自己的面试随笔,希望加深自己印象的同时也解决一些大家的疑惑。
- List、Set、Map都是实现了Collection接口的接口
- 重复性
List允许存在重复的元素,可以在不影响现有元素的值及其索引的情况下插入一个新的重复元素。
Set不允许存在重复的元素,所以不能插入重复元素。
Map是一种以键值对的形式存储元素的映射类集合,key(键)是唯一的,value(值)可以为重复的。
- 空值性
List允许任意数量的空值。
Set只允许一个空值。
Map只允许出现一个空键(key),但可以是任意数量的空值(value)。
- 排序性
List保持每个插入元素的排序,有序排列。
Set中的元素都是无序的,但是某些Set的实现类可以以某种顺序对其中的元素进行排序,例如LinkedHashSet按照元素的插入顺序进行排序。
Map也属于无序存储,但是某些Map的实现类可以对元素进行排序,例如TreeMap按照元素的升序进行排列,LinkedHashMap按照元素的插入顺序进行排列。
- 实现类
List:ArrayList、LinkedList等
Set:HashSet、LinkedHashSet、TreeSet、SortedSet等
Map:HashMap、LinkedHashMap等
- 使用场景
如果你经常需要对元素的索引值进行查询,可以使用List(ArrayList)。
如果你的数据不允许重复值存在,可以使用Set。
如果你需要对元素的插入顺序进行保留,可以使用List或者LinkedHashSet。
如果你需要对元素进行键值映射,可以使用Map。