哪怕再没有时间,记一道题也是一个小小的进步。
1、什么是集合?
2、常用的集合类有哪些?
3、List,Set,Map三者的区别?
4、哪些集合类是线程安全的?
Vetory:比ArrayList多了一个synchronized(线程安全),因为效率比较低,现在不建议使用。
HashTable:比HashMap多了个synchronized(线程安全),不建议使用。
ConcurrentHashMap:是Java5中支持高并发、高吞吐量的线程安全HashMap实现。它由Segment数组结构和HashEntry数组结构组成。(推荐使用)
5、迭代器是什么?
Iterator 接口提供遍历任何 Collection 的接口。
所有Collection接口都继承了Iterator迭代器。
Iterator使用代码如下:
- List
list = new ArrayList<>(); - Iterator
it = list.iterator(); - while(it.hasNext()){
- String obj = it.next();
- System.out.println(obj);
- }
- List<String> list = new ArrayList<>();
- Iterator<String> it = list.iterator();
- while(it.hasNext()){
- String obj = it.next();
- System.out.println(obj);
- //加remove即可
- it.remove();
- }
有一种常见的错误写法:
就是使用for循环去remove,这个会抛出ConcurrentModifificationException 异常,因为使用for循环的时候,内部会生成一个Iterator来遍历list获取对象,相当于有两个线程再执行这个list。Java 一般不允许一个线程在遍历 Collection 时另一个线程修改它。所以会抛出异常。
7、Iterator 和 ListIterator 有什么区别?
8、遍历一个List有几种方式?每一种的实现原理是什么?Java中最佳的遍历是什么?
遍历方式有以下三种:
最佳的遍历是什么?
Collections框架中提供了一个叫Random Access,用来标记List实现是否支持Random Access。
如果实现了Random Access可以使用for循环遍历,否则就使用Iterator或者foreach遍历。
9、说一下ArrayList的优缺点
优点:底层使用数组实现,是一种随机访问模式,由于他实现了Random Access,所以他查询的时候非常快,按顺序添加元素也非常方便。
缺点:删除元素需要使用元素复制操作,如果元素多时,非常消耗性能。不按顺序,即某个位置插入元素时,也需要进行元素复制,元素多时,也是非常消耗性能。
所以ArrayList适合按顺序添加元素以及随机访问场景。
10、多线程场景下如何使用 ArrayList?
ArrayList 不是线程安全的,如果遇到多线程场景,可以通过 Collections 的 synchronizedList 方法将其转换成线程安全的容器后再使用。
- List
synchronizedList = Collections.synchronizedList(list); synchronizedList.add("aaa"); - synchronizedList.add("bbb");
-
- for (int i = 0; i < synchronizedList.size(); i++) {
- System.out.println(synchronizedList.get(i));
- }