目录
一. List基本介绍
(1) List 是Java集合框架中Collection的一个子接口.
(2) List 用于存放可重复, 有序的元素.
(3) List 的三个主要的实现类是 ArrayList, LinkedList, Vector(不常用).
(4) 和Collection类似, List也是一个接口, 不能实例化对象, 我们在用List创建对象的时候要用它的实现类来创建~
二. List中的方法及其使用
通过查看文档我们可以看到, List 接口主要有以上几种方法. 我把其中比较重要的几个方法勾选了出来, 这些我们要重点熟悉掌握. 大家也可以自行翻阅文档进行学习.
下面我们通过代码演示来具体了解一下这些方法的使用吧~
首先我们要在list里存放对象. 假设我们要存放Student类型的对象.
首先定义学生类:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object obj) {
if (this == obj) { //1. 如果this和obj指向同一个对象, 则返回true;
return true;
}
if (obj instanceof Student) { //2. 如果this和obj指向不同对象, 而且obj是Student类型的
if (this.age == ((Student) obj).getAge() && this.name == ((Student) obj).getName()) {
return true;
}
return false;
}
return false;
}
}
1. 添加元素
(1) add()
add() 方法, 有两个版本: 版本一有一个参数, 版本二有两个参数.
[1] add(E e) 将指定元素添加到末尾
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println(list);
}
}
[2] add(int index, E element) 将指定元素插入指定位置.
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println(list);
Student s4 = new Student("周润发",40);
list.add(1,s4); //在下标为1的位置插入s4
System.out.println(list);
}
}
(2) addAll()
addAll() 方法的基本作用是将一个列表添加到另一个列表中去. 与add() 类似, addAll() 方法也有两个版本:
[1] addAll(Collection e) 表示将另一列表添加到当前列表之后.
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
//System.out.println(list);
Student s4 = new Student("周润发",40);
Student s5 = new Student("成龙",45);
Student s6 = new Student("周星驰",47);
List<Student> list1 = new ArrayList<>();
list1.add(s4);
list1.add(s5);
list1.add(s6);
list.addAll(list1);
System.out.println(list);
}
}
[2] addAll(intindex, Collection e) 表示在指定位置插入另一列表.
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
//System.out.println(list);
Student s4 = new Student("周润发",40);
Student s5 = new Student("成龙",45);
Student s6 = new Student("周星驰",47);
List<Student> list1 = new ArrayList<>();
list1.add(s4);
list1.add(s5);
list1.add(s6);
list.addAll(1, list1); // 在list的 1位置添加一个列表list1
System.out.println(list);
}
}
2. 删除元素
(1) remove()
remove() 方法, 参数可以传递下标, 也可以传递对象的引用. 作用都是把指定节点删除掉. 代码演示如下:
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println(list);
list.remove(0); // 把 0位置的元素("金城武")从列表中删除.
System.out.println(list);
}
}
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println(list);
list.remove(s2); // 把对象s2("木村拓哉")从当前列表中删掉.
System.out.println(list);
}
}
(2) removeAll()
与add()和addAll()的关系类似, remove()方法是删除单个元素, removeAll()方法是从一个列表里删除另一个列表中的所有元素.
因为我们在Student里重写了equals()方法, 所以只要两个对象的name和age属性一样, 那么就认为这两个对象是相同的.
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println(list);
Student s4 = new Student("木村拓哉",24);
Student s5 = new Student("梁朝伟",29);
List<Student> list1 = new ArrayList<>();
list1.add(s4);
list1.add(s5);
list.removeAll(list1);
System.out.println(list);
}
}
3. 遍历元素
(1) for 循环遍历
使用for循环遍历列表之前, 我们首先需要明确: size() 方法 返回当前列表的元素个数; get(int i) 方法返回列表中指定位置的元素. 明确这两个之后我们就可以用for循环来遍历列表了:
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
(2) for - each 遍历
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
for (Student s : list) {
System.out.println(s);
}
}
}
(3) 迭代器遍历
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
Iterator<Student> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
(4) 列表迭代器遍历
相对于普通的迭代器Iterator, 列表迭代器ListIterator 提供的方法更多一些, 除了hasNext() 和 next(), ListIterator 还有 hasPrevious() 和 pervious() 方法 --> 这就意味着我们可以使用ListIterator进行逆序遍历.
- 正序遍历
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
ListIterator<Student> lit = list.listIterator();
while (lit.hasNext()) {
System.out.println(lit.next());
}
}
}
- 逆序遍历
使用列表迭代器进行逆序遍历, 首先我们需要让列表迭代器指向 list 的末尾位置. 有两种方式可以实现这个操作:
第一种: 给迭代器传的参数是列表元素个数 list.size().
ListIterator<Student> lit = list.listIterator(list.size());
第二种: 给迭代器传的参数是列表中最后一个元素的位置 (位置从1号开始).
ListIterator<Student> lit = list.listIterator(3);
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
ListIterator<Student> lit = list.listIterator(3);
//ListIterator<Student> lit = list.listIterator(list.size());
while (lit.hasPrevious()) {
System.out.println(lit.previous());
}
}
}
4. 判断
(1) contains()
传一个参数, 如果列表中包含所传元素, 则返回true.
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println(list);
System.out.println(list.contains(new Student("金城武", 26)));
}
}
(2) containsAll()
传一个列表, 如果列表中包含所传列表的所有元素, 则返回true.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
List<Student> list1 = new ArrayList<>();
list1.add(s2);
list1.add(s3);
System.out.println(list.containsAll(list1));
}
}
(3) isEmpty()
如果列表为空, 则返回true.
[注]: clear() 方法, 清空当前链表 (删除当前链表中的所有元素).
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
//由于List是一个接口, 不能实例化对象. 我们还是用它的实现类ArrayList来实例化一个list对象
Student s1 = new Student("金城武",26);
Student s2 = new Student("木村拓哉", 24);
Student s3 = new Student("梁朝伟",29);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println(list.isEmpty());
list.clear(); // 清空列表
System.out.println(list.isEmpty());
}
}
好了, 本篇文章就介绍到这里啦, 大家如果有疑问欢迎评论, 如果喜欢小编的文章, 记得点赞收藏~~