List与Set有什么区别
Java面试题:List与Set有什么区别?
得分点
- 有序可重复的List
- 无序可重复的Set
标准回答
List和Set都是Java集合框架中的接口,它们的主要区别在于元素的有序性和重复性:
- List代表有序的元素可以重复的集合。在List中,每个元素都有对应的顺序索引,它默认按照元素的添加顺序来设置元素的索引,并且可以通过索引来访问指定位置的集合元素。List允许使用重复元素,这意味着可以在List中包含多次相同的元素。
- Set代表无序的元素不可重复的集合。通常,Set不能记住元素的添加顺序,即它不维护元素的顺序信息。Set集合不允许包含相同的元素,如果尝试将两个相同的元素添加到同一个Set中,将会导致失败,添加方法将返回false。
加分回答
虽然Set代表无序的集合,但是它有支持排序的实现类,其中最常见的是TreeSet。TreeSet可以确保集合元素处于排序状态,并支持两种排序方式:自然排序和定制排序。它的底层是由TreeMap实现的,因此元素会按照特定的排序规则进行排列。
需要注意的是,TreeSet是非线程安全的,因此在多线程环境下使用时需要额外的同步措施。此外,TreeSet内部的元素值不能为null,因为它使用元素值来进行排序。