1. 集合Collection中存储的如果是自定义类的对象,需要自定义类重写哪个方法?为什么?
equals()方法。 contains()/remove()/retainsAll()....
List:equals()方法
Set:(HashSet、LinkedHashSet为例):equals()、hashCode()
(TreeSet为例):Comparable:compareTo(Object obj)
Comparator:compare(Object o1, Object o2)
2 .ArrayList,LinkedList,Vector三者的相同点与不同点?【面试题】
相同点 三者都是List接口的实现类,List是有序可重复的,所以三者都是有序可重复的
不同点 ArrayList底层存储数据的结构是数组的形式,是主要实现类。
在jdk7中进行实例化的时候底层会创建一个长度为10的数组,如果数组长度不够存储数据,会进行扩充,每次扩充为原来的1.5倍
在jdk8中进行实例化的时候底层不会进行创建数据,但在进行添加操作的时候底层会创建一个长度为10的数组,扩充操作同jdk7一致
如果在存储固定量的数据时,可以通过带参的构造器实例化需要数据长度的对象。
ArrayList查找效率高,复杂度为o(1)(LinkedList查找复杂度为o(n)),ArrayList是线程不安全的
LinkedList底层存储数据的结构是双向链表的形式,
在需要进行频繁的插入和删除操作时,使用LinkedList效率要比ArrayList效率高(LinkedList删除复杂度为o(1),ArrayList删除复杂度为o(n)),LinkedList也是线程不安全的
Vector底层存储数据的结构是数组的形式,
在进行实例化的时候底层会创建一个长度为10的数组,每次扩充为原来的2倍,是线程安全的,作为古老实现类出现,效率低,基本上不用。
List Map Set
3. List 接口的常用方法有哪些?(增、删、改、查、插、长度、遍历)
增:add(Object obj)
删:remove(Object obj)/remove(int index)
改:set(int index,Object obj)
查:get(int index)
插:add(int index,Object obj)
长度:size()
遍历:使用:Iterator、foreach、普通的for
4. 如何使用Iterator和增强for循环遍历List。举例说明
5. Set 存储数据的特点是什么?常见的实现类有什么?说明一下彼此的特点。
Set存储数据的特点是无序的,不可重复的
常见的实现类:HashSet LinkedHashSet TreeSet
HashMap LinkedHashMap TreeMap
package top.qaqaq.java.P542;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author RichieZhang
* @create 2022-10-27 下午 12:48
*/
public class TraversTest {
@Test
public void test1(){
ArrayList list = new ArrayList();
list.add(123);
list.add(456);
list.add("你好");
list.add(new User("Tom",22));
list.add(129);
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
for (Object obj : list){
System.out.println(obj);
}
}
}
package top.qaqaq.java.P542;
/**
* @author RichieZhang
* @create 2022-10-27 下午 1:00
*/
public class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}