当前位置: 首页 > news >正文

List接口

目录

一. 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;}@Overridepublic String toString() {return "{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic 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的位置插入s4System.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位置添加一个列表list1System.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());}
}

   好了, 本篇文章就介绍到这里啦, 大家如果有疑问欢迎评论, 如果喜欢小编的文章, 记得点赞收藏~~

 


http://www.mrgr.cn/news/81086.html

相关文章:

  • 米思齐图形化编程之ESP32开发指导
  • 重拾设计模式--建造者模式
  • python的序列类型及操作
  • test_4_17_2Snake
  • Qt:QMetaObject::connectSlotsByName实现信号槽自动关联
  • SSC338Q SigmaStar 摄像头主控芯片
  • 机器学习(Machine Learning)的安全问题
  • 以太网详解(三)FPGA以太网IP配置(Quartus平台)
  • C++的封装(十四):《设计模式》这本书
  • Kafka快速扫描
  • Redis存在安全漏洞
  • EasyPoi 使用$fe:模板语法生成Word动态行
  • [react 3种方法] 获取ant组件ref用ts如何定义?
  • 麒麟操作系统服务架构保姆级教程(三)ssh远程连接
  • en3d 部署笔记
  • 数据可视化echarts学习笔记
  • 【老白学 Java】HashSet 应用 - 卡拉 OK(五)
  • 第1章 命题逻辑
  • Android13下拉状态栏QS面板的加载流程解析
  • 搭建MPI/CUDA开发环境
  • Mapbox-GL 中 `token` 的使用
  • 单元测试使用记录
  • LLaMA-Factory 单卡3080*2 deepspeed zero3 微调Qwen2.5-7B-Instruct
  • 数据结构与算法再探(三)树
  • dockerfile文档编写(2):docker pull、apt install和pip镜像加速
  • EdgeX Core Service 核心服务之 Core Command 命令