今天整理了一些关于集合的一些问题,主要还是记录下来关于集合的问题可以通过博客就能回忆起,当然还是做分享的,可能有些地方不是很全面,欢迎补充~~~
集合大纲图
左侧面试题解答:
1.Array与ArrayList有什么区别
Array:java中的数组,数组的声明有三种方式,在定义数组时要声明数组的类型和长度
int a[] = new int [5];
int [] a = new int [5];
int a[] = {1,1};
ArrayList:是动态数组,被称作集合,可以动态添加和删除集合中的元素。
集合的定义:
List list = new ArrayList();
List<String> a = new ArrayList<>(10);
在定义集合的时候没有声明泛型这个集合是可以添加任何类型元素,使用是就只能添加这一种类型的了。集合可以定义长度 当然也可以不
总结:
①.ArrayList是Array的复杂版本
②.存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据
③.长度的可变性:Array的长度是固定的,而ArrayList的长度是可变的
集合和数组的关系补充:
集合数组的互转:
①.数组转list,可以使用Arrays.asList(数组)
②.List转数组,使用list.toArray()
2.HashMap、TreeMap、linkedHashMap区别?
根据map的子类使用场合
①.在Map中插入、删除和定位元素,HashMap是最好的选择
②.需要集合有排序功能,使用TreeMap更好
③.需要按照插入的顺序存储集合,使用LinkedHashMap
右侧面试题解答:
Iterable及子孙接口和类
hasNext() | 是否存在下一项 |
next() | 获取下一项 |
remove() | 可以删除由next()最新返回的项 |
Collection接口(java.util)
size() | 返回集合中的项数 |
isEmpty() | 判断集合中是否为空 |
contains(Object) | 判断集合中是否包含某项 |
clear() | 清空集合 |
add(A) | 往集合添加项 |
remove(Object) | 从集合中删除项 |
iterator() | 迭代遍历 |
1.Collection接口的remove()方法和Iterator接口的remove()方法区别?
①性能方面:Collection的remove方法必须首先找出要被删除的项,找到该项的位置采用的是单链表结构查询,单链表查询效率比较低,需要从集合中一个一个遍历才能找到该对象;
Iterator的remove方法结合next()方法使用,比如集合中每隔一项删除一项,Iterator的remove()效率更高
②容错方面: 在使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因为集合中对象的个数会改变而Iterator 内部对象的个数不会,不一致则会出现该异常
在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致
list
元素可以重复,有序的集合
2.ArrayList和LinkList的区别
ArrayList(数组结构):
优点:get和set调用花费常数时间,也就是查询的速度快;
缺点:新项的插入和现有项的删除代价昂贵,也就是添加删除的速度慢
LinkedList(链表结构):
优点:新项的插入和和现有项的删除开销很小,即添加和删除的速度快
缺点:对get和set的调用花费昂贵,不适合做查询
set
元素不可以重复,无序的集合
3.HashSet、TreeSet、LinkedHashSet区别?
①.需要速度快的集合,使用HashSet
②.需要集合有排序功能,使用TreeSet
③.需要按照插入的顺序存储集合,使用LinkedHashSet
Queue
队列,先进先出