2022.02.23Java集合每日一考
1.集合Collection中存储的如果是自定义类的对象,需要自定义类重写哪个方法?为什么?
需重写equals(),因为remove(),removeAll(),需要调用equals判断是否相等
List:重写equals()
Set:重写equals()和hashcode(),对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object obj)方法,以实现对象相等规则。即:“相等的对象必须具有相等的散列码”。
TreeSet:加入到TreeSet的对象的类必须实现Comparable接口
2.ArrayList,LinkedList,Vector三者的相同点与不同点?【面试题】
相同点:都是List接口的实现类,元素有序可重复的;
不同点:ArrayList线程不安全,Vector是线程安全的
LinkedList底层是双向链表存储元素的,ArrayList和Vector是底层都是一个自动变长的数组
3.List 接口的常用方法有哪些?(增、删、改、查、插、长度、遍历)
增 add
删 remove、removeAll
改 set(int index,Object o)
查 get(int index)
插 insert(int index,Object o),insert(Object o)
长度 size()
遍历 ①使用iterator迭代器②增强for循环③一般for循环
4.如何使用Iterator和增强for循环遍历List。举例说明
public class CircleTest { public static void main(String[] args) { Circle cir1 = new Circle(1.0); Circle cir2 = new Circle(2.0); Circle[] circles = new Circle[]{cir1,cir2}; for (Circle circle:circles) { System.out.println(circle.getRadius()); } System.out.println("_________________"); Collection colls = new ArrayList(); colls.add(cir1); colls.add(cir2); Iterator iterator = colls.iterator(); while (iterator.hasNext()){ Circle c = (Circle)iterator.next(); System.out.println(c.getRadius()); } }
输出:
1.0
2.0
_________________
1.0
2.0
5.Set存储数据的特点是什么?常见的实现类有什么?说明一下彼此的特点。
Set是一个数组+链表的形式,通过计算存入元素的hashcode,无序且不可重复地存入。
实现类:hashSet数组+链表
LinkHashSet数组+链表,每一个元素之间有双向链表,按顺序保存,不允许元素重复
TreeSet:new一个hashMap对象,底层是使用红黑树结构存储数据