Q1:如果对List遍历,在遍历过程中对List进行增删改操作,为什么报错?
因为在遍历时做的其他操作迭代器不知道,ListIterator除了Iterator的hasNext,next,remove方法外,还有对数据的增删改操作:add,set等
Q2:列表扩容原理:
ArrayList和Vector底层是数组组成的,所以扩容时,原理是新建一个数组,将原数组数据复制到新数组,再加入新数据。
ArrayList:初始容量10,50%扩容;Vector:100%扩容
Q3:List判断底层数据是否相同的方法?
集合的equal方法,尽量自己重写。
Q4:链表LinkedList的方法?
offerFirst(),offerLast(),peekFirst(),peekLast(),pollFirst(),pollLast()
Q5:Set---HashSet如何保证唯一性?
首先比较hashcode值是否一样,如果hashcode值一样,就比较值是否一样,一样不存。
因为这样所以存在容器是无序的。
Q6:如何让HashSet有序?
将HashSet的数据通过链表的形式连在一起 -> LinkedHashSet
Q7:Map实现类的特点?
HashTable:key value都不可为null
HashMap:key value可为null
TreeMap:可对key做指定顺序的排列
Q8:Map与Set
Map的key不可重复,key-value不可重复,所以HashMap可以keySet转为Set,entrySet转为Set
Q9:ConcurrentHashMap和HashTable以及用Collectons.sychronizedMap()修饰的map的区别
1.HashTable来自废弃的类Dictionary;
2.HashTable内部方法全用类synchronized本质上与用Collectons.sychronizedMap()修饰的map是一个原理,但是Collectons.sychronizedMap()方法没有废弃;
3.ConcurrentHashMap在实现同步上与HashTable不一样,ConcurrentHashMap是分多个segment的,用那一段数据就锁哪一段segment。
Q10:HashMap,LinkedHashMap和TreeMap区别
HashMap就是正常的通过hashcode值计算存储位置,本身是无序且线程不安全的,Collectons.sychronizedMap()修饰的map可同步;
LinkedHashMap通过链表形式以插入的顺序存储数据;
TreeMap通过红黑树的形式存储,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
Q11:TreeMap的特点与应用
TreeMap底层是红黑树,因为红黑树的时间复杂度是O(logn),效率很高。