主题
集合之 List
面试题 Java List
说一下集合的体系?
单列集合:

双列集合:

Collection 和 Collections 的区别?
Collection:
是 java.uitl 下的接口,他是各种集合的父接口,继承于它的接口主要有 set 和 list;
Conllecitons:
是个 java.util 下的类,是针对集合的工具类,提供一系列静态方法对各种集合的搜索,排序,线程安全化等操作。
List a=new ArrayList() 和 ArrayList a =new ArrayList() 的区别?
List list = new ArrayList(); 这句创建了一个 ArrayList 的对象后把上溯到了 List。此时它是一个 List 对象了,有些 ArrayList 有但是 List 没有的属性和方法,它就不能再用了。ArrayList list=new ArrayList(); 创建一对象则保留了 ArrayList 的所有属性。所以需要用到 ArrayList 独有的方法的时候不能用前者。
实例代码如下:
java
List list = new ArrayList();
ArrayList arrayList = new ArrayList();
list.trimToSize(); //错误,没有该方法。
arrayList.trimToSize(); //ArrayList里有该方法。Enumeration 和 iterator 接口的区别?
- Enumeration 接口作用与 iterator 接口相似,但只提供了遍历 vector 和 HashTable 类型集合元素的功能,不支持元素的移除操作
- Enumeration 速度是 iterator 的 2 倍,同时占用更少的内存。但是,iterator 远比 enumeration 安全,因为其他线程不能够修改正在被 iterator 遍历的集合里面的对象。同时,iterator 允许调用者删除底层集合里面的元素。
ListIterator 有什么特点,与 iterator 区别?
- Iterator 是 ListIterator 的父类接口
- Iterator 是单列集合(Collection)公共取出容器中元素的方式
ListIterator 是 List 集合的特有取出元素方式 - Iterator 中具备的功能只有 hashNext(),next(),remove();
ListIterator 中具备着对被遍历的元素进行增删查改的方法,可以对元素进行逆向遍历。
ArrayList 集合加入 1 万条数据,应该怎么提高效率?
直接初始化 ArrayList 集合的初始化容量为 1 万。
但达到 100 万以上乃至 1000 万以上时,初始化容量方法效率会下降
说一下 ArrayList 和 Vector 的扩容?
ArrayList 和 Vector 都有一个初始的容量大小。
ArrayList 是一个可改变大小的数组,当更多的元素加入到 ArrayList 中时,其大小将会动态地增长。
内部的元素可以直接通过 get 与 set 方法进行访问,因为 ArrayList 本质上就是一个数组.
Vector 和 ArrayList 在更多元素添加进来时会请求更大的空间。
Vector 每次请求其大小的双倍空间,而 ArrayList 每次对 size 增长 50%.(Vector 默认增加原来的一倍,ArrayList 默认增加原来的 0.5 倍)
注意:默认情况下 ArrayList 的初始容量非常小,所以如果可以预估数据量的话,最好分配一个较大的初始值,这样可以减少调整大小的开销。
更新: 2020-09-25 14:15:40
原文: <https://www.yuque.com/fcant/notes/lxw28v>