本文应付面试足够
1.List、Set都继承Collection接口
2.List元素放入有序、可重复,查询效率高(因为地址连续);
Set元素放入无序(位置由HashCode决定,实际固定)、重复会覆盖,加入Set的对象必须定义equals方法以确保对象的唯一性,只可以用迭代器来遍历,增删效率高
3.线程安全
LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。
4.ArrayList和LinkedList,前者查询方便,后者增删方便,所以不能盲目用ArrayList
5.ArrayList和Vector,都是用数组实现,后者线程安全,可以设置增长因子,在空间不足时,增加空间方式和ArrayList不同,所以大数据量用Vector有优势
6.HashSet和TreeSet,前者HashCode实现,最多只能放一个null,放入其中的对象必须实现HashCode方法,适合快速查找;后者红黑树实现,其中的元素是自动排好序的 ,不可放入null,适合用于排序。
7.HashMap、TreeMap和LinkedHashMap。HashMap基于HashCode,链表解决冲突,8节以后自动化转化为红黑树。TreeMap采用红黑树,适用于按键遍历。LinkedHashMap比HashMap多维护一个双向链表用以维护加入顺序。