1.ArrayList和LinkedList的区别:
1.ArrayList(数组结构):
优点:get和set调用花费常数时间,也就是查询速度快。
缺点:新项的插入和现有项的删除代价昂贵,也就是添加删除的速度慢。
2. LinkedList(链表结构):
优点:新项的插入和和现有项的删除开销很小,即添加和删除的速度快。
缺点:对 get 和 set 的调用花费昂贵,不适合做查询
3. 是否保证线程安全:
ArrayList 和 LInkedList 都是不同步的,也就是不保证线程安全。
4.底层数据结构:
ArrayList 底层使用的是 Object 数组,LinkedList 底层使用的是双向循环链表数据结构。
5.是否支持快速随机访问:
LinkedList 不 支 持 高 效 的 随 机 元 素 访 问 , 而 ArrayList 实 现 了 RandmoAccess 接口, 所以有随 机访问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于 get(int index)方法)。
2.Collection接口的remove()方法和Iterator接口的remove()方法的区别
1.参数的区别:
Collection的remove()方法是有参数的而Iterator的remove()方法是无参数的。
2.性能方面:
Collection的remove方法必须首先找出要被删除的项,找到该项的位置采用的是单链表结构查询,单链表查询 效率比较低,需要从集合中一个一个遍历才能找到该对象;
Iterator的remove方法结合next()方法使用,比如集合中每隔一项删除一项,Iterator的remove()效率更高
3.容错方面:
使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因 为集合中对象的个数会改变而Iterator 内部对象的个数不会,不一致则会出现该异常
在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致
3.Array和ArrayList的区别:
1.Array是Java中的数组,而ArrayList是动态数组,也就是数组的复杂版本,它可以动态的添加和删除元素,被称为“集合”, 2.长度的可变:
Array的长度是固定的,而ArrayList的长度是可变的。
3.存储的数据类型:
Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据。
4.怎样将一个数组转成List:
1.数组转list,可以使用Arrays.asList(数组),而List转数组,使用list.toArray()。
5.HashSet,TreeSet,LinkedHashSet的区别:
1.需要速度快的集合,使用HashSet。
2.需要集合有排序功能,使用TreeSet。
3.需要按照插入的顺序存储集合,使用LinkedList。
HashMap和HashSet的区别:
HashMap | HashSet |
实现了Map接口 | 实现了Set接口 |
存储键值对 | 存储对象 |
调用put()向Map中添加元素 | 调用add()向Set中添加元素 |
HashMap使用key计算hashcode | HashSet使用成员对象计算hashcode |
HashMap相对于HashSet较快, HashSet比较HashMap来说比较慢 因为它是使用唯一的键获取对象 | HashSet比较HashMap来说比较慢 |