通过之前的分析已经清楚了ArrayList子类的实现原理以及List核心操作,但是在测试的时候使用的是系统提供的String类,这是一个设计非常完善的类,而对于类集而言也可以实现自定义类对象的保存。
范例:实现自定义类对象保存
package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
List<Person> all = new ArrayList<Person>();
all.add(new Person("张三", 30));
all.add(new Person("李四", 16));
all.add(new Person("小强", 78));
System.out.println(all.contains(new Person("小强", 78)));
all.remove(new Person("小强", 78));
all.forEach(System.out::println); //方法引用代替了消费型的接口
/**
* false
* 姓名:张三、年龄:30
* 姓名:李四、年龄:28
* 姓名:小强、年龄:78
*/
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// setter、getter、构造略
public String toString() {
return "姓名:" + this.name + "、年龄:" + this.age;
}
}
在使用List保存自定义对象时,如果需要使用到contains()、remove()方法进行查询或删除处理时一定要保证类中已经覆写了equals()方法。
package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
List<Person> all = new ArrayList<Person>();
all.add(new Person("张三", 30));
all.add(new Person("李四", 16));
all.add(new Person("小强", 78));
System.out.println(all.contains(new Person("小强", 78)));
all.remove(new Person("小强", 78));
all.forEach(System.out::println); //方法引用代替了消费型的接口
/**
* false
* 姓名:张三、年龄:30
* 姓名:李四、年龄:28
* 姓名:小强、年龄:78
*/
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Person)) {
return false;
}
Person per = (Person) obj;
return this.name.equals(per.name) && this.age == per.age;
}
// setter、getter、构造略
public String toString() {
return "姓名:" + this.name + "、年龄:" + this.age;
}
}
/**
* true
* 姓名:张三、年龄:30
* 姓名:李四、年龄:28
*/