

1. 为什么要有集合
本质上是一些可以复用的函数
2. 泛型好处
编译器提醒报错,避免了运行时的ClassCastException异常, 不用生成类型检查的字节码,更快
3. 迭代器接口
用来遍历集合, 并且提供移除元素方法
4. 为什么迭代器不提供add方法
迭代器无法保证迭代的顺序,那么这种说法是不清晰的(unclear)。注意的是,ListIterator就提供了add()方法,因为它能保证迭代的顺序。
5. Iterator 和ListItreator的区别
6. 对迭代器的fail-fast如何理解?
快速报错机制会在获取下一个元素时候修改报错。除了想并发的类,所有集合都是这样的
7 . fail-fast 和 fail-safe区别
Iterator的fail- safe是对集合在进行clone时提供的一种保护机制,因此集合发生了修改不会引起任何问题. fail-safe是针对并发集合类, fail-fast是iterator实现类都有的
8. 如何避免ConcurrentModificationException?
使用并发集合类, 例如使用 copyonwriteArrayList 代替ArrayList。
9. HashMap 和 HashTable区别
- HashMap的键值均可为null,而Hashtable不允许键或值为null。
- Hashtable是synchronized的 而HashMap 则不是同步的。
- Java 1.4中引入LinkedHashMap作为HashMap的子类,因此可以进行有序的迭代,并且可以很轻松的从 HashMap 过渡到 LinkedHashMap,然而 Hashtable的迭代顺序是无法预测的。
10. 何时用hashmap , treemap
对 于插入、删除、定位元素频繁的操作,HashMap提供了最好的效率。如果想要按key的排序来遍历,那么TreeMap是不二选择。先向HashMap中添加元素,然后转换为TreeMap再按key的排序进行遍历也许会带来效率上的提高。
11. 什么是BlockingQueue
是Queue接口的子接口.支持获取元素时等待队列变为非空,以及存储元素时等待空间变得可用. 主要用来解决生成者,消费这问题。
12. 怎样理解Comparable, 和 Comparator接口
Comparable 放在类上实现 ,更自然。 comparator接口更灵活
13 . 如何确保集合传入一个方法不被修改
调用Collections.unmodifiableCollection(Collection c)方法来创建一个只读的集合,然后再将它传入函数中,这样就会确保任何企图修改集合的操作都会引起 UnsupportedOperationException异常