1.集合Collection中存储的如果是自定义类的对象,需要自定义类重写哪个方法?为什么?
2.ArrayList,LinkedList,Vector三者的相同点与不同点?【面试题】
3.List接口的常用方法有那些?(增、删、改、查、插、长度、遍历)
4.如何使用Iterator和增强for循环遍历List。举例说明
5.Set存储数据的特点是什么?常见的实现类有什么?说明一下彼此的特点。
如果是List接口,需要重写equals方法,因为List接口时通过equals来判读两个元素是否相等,方法调用都需要考虑equals()方法
如果是Set接口,需要重写equals方法和hashCode()方法,因为Set接口需要通过hashCode()来获取哈希值,进而判断在数组的位置,后通过equals来判读两个元素是否相等,来保证不重复
如果是TreeSet类,需要重写toCompare()和hashCode()方法,因为Set方法需要通过hashCode()来获取哈希值,进而判断在数组的位置,
如果哈希值一样需要判断toCompare()来判断二者是否一样进而是否存储
comparator()
同:存入的元素有序,可重复,都是先List接口
ArrayList: List接口的主要实现类,线程不安全、效率高,底层通过Object[]数组存储,正常情况下扩容为1.5倍
LinkedList:如果进行频繁的插入、删除操作有限使用LinkedList比ArrayList效率高,底层通过双向线链表存储
Vector:List接口的古老实现类,线程安全、效率低,底层通过Object[]数组存储,正常情况下扩容为2倍
增:add()
删:remove()
改:set()
查:get()
插:add()
长度:size()
遍历:for增强类、for、interator迭代器
public class HomeWork {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1);
list.add(11);
list.add(111);
list.add(1111);
list.add(11111);
list.add(111111);
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("****************");
list.forEach(System.out::println);
}
}
Set:不可重复,无序性
HashSet:无序性,不可重复,Set的主要实现类,
LinkedHashSet:可以按输入顺序遍历
TreeSet:可以按照类或类某个属性进行排序,输入元素的类型要一致