1、集合Collection中储存的如果是自定义类对象,需要自定义类重写那个方法?为什么?
需要重写equals方法;因为根据hashCode()方法,他们是两个对象,违反了相同对象必须具有相等的散列码,所以对应的类一定要重写equals()和hashCode()方法,以实现对象相等规则(相等的对象必须具有相等的散列码)。
2、ArrayList,LinkedList,Vector三者的相同点和不同点。
相同点:
都是List接口的实现类
元素都有序可重复
不同点:
ArraysList是线程不安全的,Vector是线程安全的
ArraysList和Vector底层都是一个自动边长的数组,LinkedList地城是双向链表存储元素的。
3、List接口中的常用方法。
增:add(int index,E element)、addAll(int index,Collection<? ecxends E>c)
删:remove(),removeAll()
改:set(int index,E element)
查:get(int index),subList(int fromIndex,int toIndex)
插:insert(int index,E element)
长度:size()
遍历:Iterator迭代器(hasNext(),next())
4、Set存储数据的特点是什么?有哪些写实现类、简述各实现类特点。
Set是一个数组+链表的形式,通过计算元素的hashCode将元素无序无重复的存入。
hashSet:不能保证元素的排列顺序。HashSet 不是线程安全的。集合元素可以是 null
LinkHashSet:LinkedHashSet 是 HashSet 的子类,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
TreeSet:TreeSet 可以确保集合元素处于排序状态。TreeSet底层 使用红黑树结构存储数据。
5、如何去除list中重复的数据。
可以利用HashSet不能添加重复数据的特点,去除重复元素。
可以利用List中contains方法循环遍历,避免重复