目录
一. List基本介绍
二. List中的方法及其使用
1. 添加元素
(1) add()
(2) addAll()
2. 删除元素
(1) remove()
(2) removeAll()
3. 遍历元素
(1) for 循环遍历
(2) for - each 遍历
(3) 迭代器遍历
(4) 列表迭代器遍历
4. 判断
(1) contains()
(2) containsAll()
(3) isEmpty()
一. 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());
}
}
好了, 本篇文章就介绍到这里啦, 大家如果有疑问欢迎评论, 如果喜欢小编的文章, 记得点赞收藏~~