Skip to content

Latest commit

 

History

History
71 lines (36 loc) · 2.65 KB

collection.md

File metadata and controls

71 lines (36 loc) · 2.65 KB

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方法。