ArrayList子类是在使用List接口时最常用的一个子类,该类利用数组实现List集合操作。ArrayList类定义如下:
public class ArrayList
extends AbstractList<E>
implement List<E>, RandomAccess, Cloneable, Serializable{}
ArrayList实现原理有点意思,可以自行搜索了解了解~
1、使用ArrayList实例化List接口的例子:
package com.mydemo;
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
public static void main(String[] args) {
// 为List父接口进行实例化
List<String> all = new ArrayList<>();
// 保存数据
all.add("火影");
all.add("火影"); // 保存重复的数据
all.add("水影");
all.add("风影");
all.add("土影");
all.add("雷影");
/**
* 输出集合对象
* 通过分析结果,我们可以发现:
* 重复数据允许保存
* 集合中的数据保存顺序为添加时顺序
*/
System.out.println(all);
System.out.println("--------------------------------------------");
/**
* Lambda表达式输出
*/
all.forEach((str)->{
System.out.println(str + "、");
});
}
}
运行结果:
[火影, 火影, 水影, 风影, 土影, 雷影]
-------------------------------------------------------------------
火影、
火影、
水影、
风影、
土影、
雷影、
2、集合操作方法的例子:
package com.mydemo;
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
public static void main(String[] args) {
// 为List父接口进行实例化
List<String> all = new ArrayList<>();
System.out.println("集合是否为空:"+ all.isEmpty() + "、集合元素个数:" + all.size());
// 保存数据
all.add("火影");
all.add("火影"); // 保存重复的数据
all.add("水影");
all.add("风影");
all.add("土影");
all.add("雷影");
System.out.println("数据存在判断:"+ all.contains("火影"));
System.out.println("数据存在判断:"+ all.contains("火影3"));
all.remove("火影");
System.out.println("集合是否为空:"+ all.isEmpty() + "、集合元素个数:" + all.size());
System.out.println(all.get(1));
}
}
运行结果:
集合是否为空:true、集合元素个数:0
数据存在判断:true
数据存在判断:false
集合是否为空:false、集合元素个数:5
水影
3、ArrayList保存自定义类对象的例子:
package com.mydemo;
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
public static void main(String[] args) {
// 实例化集合接口
List<Member> all = new ArrayList<>();
// 增加数据
all.add(new Member("张三", 18));
all.add(new Member("李四", 19));
all.add(new Member("王五", 20));
all.add(new Member("赵六", 21));
// 方法引用替代消费型函数式接口
all.forEach(System.out::println);
System.out.println(all.contains(new Member("王五", 20)));
System.out.println(all.contains(new Member("王五", 21)));
all.remove(new Member("王五", 20));
// 方法引用替代消费型函数式接口
all.forEach(System.out::println);
}
}
// 自定义程序类
class Member {
private String name;
private int age;
public Member(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 方法覆写
* <p>
* 为了保证集合中的contains()与remove()两个方法的正确执行,
* 所以必须保证类中已经正确覆写类equals()方法。
*
* @param obj
* @return
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Member)) {
return false;
}
Member member = (Member) obj;
return this.name.equals(member.name) && this.age == member.age;
}
@Override
public String toString() {
return "Member{" +
"name='" + name + '\'' +
", 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;
}
}
运行结果:
Member{name='张三', age=18}
Member{name='李四', age=19}
Member{name='王五', age=20}
Member{name='赵六', age=21}
true
false
Member{name='张三', age=18}
Member{name='李四', age=19}
Member{name='赵六', age=21}