1、Collection、SET、List、Map区别:
Collection 接口存储一组不唯一,无序的对象;
List 接口存储一组不唯一,有序(插入顺序)的对象;
Set 接口存储一组唯一,无序的对象;
Map接口存储一组键值对象,提供key到value的映射;
2、ArrayList、LinkedList区别
ArrayList实现了长度可变的数组,在内存中分配连续的空间。
– 优点:遍历元素和随机访问元素的效率比较高
– 缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
LinkedList采用链表存储方式。
– 优点:插入、删除元素时效率比较高
– 缺点:遍历和随机访问元素效率低下
3、Iterator 接口 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
Iterator接口定义了如下方法:
boolean hasNext(); //判断是否有元素没有被遍历
Object next(); //返回游标当前位置的元素并将游标移动到下一个位置
void remove(); //删除游标左面的元素,在执行完next之后该操作只能执行一次
4、Vector
Vector也是List接口的一个子类实现,Vector跟ArrayList一样,底层都是使用数组进行实现的。
面试经常问区别:
(1)ArrayList是线程不安全的,效率高,Vector是线程安全的效率低;
(2)ArrayList在进行扩容的时候,是扩容1.5倍,Vector扩容的时候扩容原来的2倍;
5、SET
a、set中存放的是无序,唯一的数据
b、set不可以通过下标获取对应位置的元素的值,因为无序的特点
c、使用treeset底层的实现是treemap,利用红黑树来进行实现
d、设置元素的时候,如果是自定义对象,会查找对象中的equals和hashcode的方法,如果没有,比较的是地址
e、树中的元素是要默认进行排序操作的,如果是基本数据类型,自动比较,如果是引用类型的话,需要自定义比较器
比较器分类:
内部比较器
定义在元素的类中,通过实现comparable接口来进行实现
外部比较器
定义在当前类中,通过实现comparator接口来实现,但是要将该比较器传递到集合中
注意:外部比较器可以定义成一个工具类,此时所有需要比较的规则如果一致的话,可以复用,而内部比较器只有在存储当前对象的时候才可以使用。如果两者同时存在,使用外部比较器,当使用比较器的时候,不会调用equals方法。