有勇气的牛排博客

java学习笔记 集合 --- List

有勇气的牛排 429 Java 2021-08-19 13:43:45

1 List 集合概述和特点

Module:jva.base

软件包:java.util

(1)有序集合(序列):用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素。

(2)与Set集合不同,列表通常允许重复的元素

List 集合特点

(1)有序:存储和取出的元素顺序一致

(2)可重复:存储的元素可以重复

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListDemo { public static void main(String[] args) { // 创建集合对象 List<String> list = new ArrayList<String>(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); list.add("world"); // 输出集合对象 System.out.println(list); // 迭代器方式遍历 Iterator<String> it = list.iterator(); while (it.hasNext()){ String s = it.next(); System.out.println(s); } } }

输出

[hello, world, java, world] hello world java world

2 List集合方法

void add(int index, E element):在此集合中的指定位置插入指定的元素

E remove(int index):删除指定索引处的元素,返回被删除的元素

E set(int index, E element):修改指定索引处的元素,返回修改的元素

E get(int index):返回指定索引处的元素

注:

索引越界后,会抛出索引异常java.lang.IndexOutOfBoundsException

package List; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListDemo { public static void main(String[] args) { // 创建集合对象 List<String> list = new ArrayList<String>(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); list.add("world"); // void add(int index, E element):在此集合中的指定位置插入指定的元素 // list.add(1,"javaee"); // list.add(11,"javaee"); // 索引越界异常 // E remove(int index):删除指定索引处的元素,返回被删除的元素 // System.out.println(list.remove(1)); // E set(int index, E element):修改指定索引处的元素,返回修改的元素 // System.out.println(list.set(1,"666")); // E get(int index):返回指定索引处的元素 // System.out.println(list.get(11)); // 输出集合对象 // System.out.println(list); // 用for循环遍历集合 for (int i = 0; i < list.size(); i++) { String s = list.get(i); System.out.println(s); } } }

3 List 集合存储学生对象并遍历

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

思路

(1)定义学生类
(2)创建List集合对象
(3)创建学生对象
(4)把学生添加到集合
(5)遍历集合(迭代器方式,for循环方式)

package ListDemo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListDemo { public static void main(String[] args) { // 创建List集合对象 List<Student> list = new ArrayList<Student>(); // 创建学生对象 Student s1 = new Student("灰太狼", 20); Student s2 = new Student("懒洋洋", 21); Student s3 = new Student("导演", 22); // 把学生添加到集合 list.add(s1); list.add(s2); list.add(s3); // 迭代器方式遍历 Iterator<Student> it = list.iterator(); while (it.hasNext()) { Student s = it.next(); System.out.println(s.getName() + "," + s.getAge()); } System.out.println("--------"); // fot 循环方式遍历 for(int i=0;i<list.size();i++){ Student s = list.get(i); System.out.println(s.getName() + "," + s.getAge()); } } }

输出:

灰太狼,20 懒洋洋,21 导演,22 -------- 灰太狼,20 懒洋洋,21 导演,22

4 List 并发修改异常

package List; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListDemo { public static void main(String[] args) { // 创建集合对象 List<String> list = new ArrayList<String>(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); // 遍历集合,得到每一个元素,看有没有world这个元素,如果有,就添加一个"javaee"元素 Iterator<String> it = list.iterator(); while (it.hasNext()){ String s = it.next(); if(s.equals("world")){ list.add("javaee"); } } // 输出集合对象 System.out.println(list); } }

抛出运行时异常(继承)java.util.ConcurrentModificationException当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常

优化:

package List; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListDemo { public static void main(String[] args) { // 创建集合对象 List<String> list = new ArrayList<String>(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); // 遍历集合,得到每一个元素,看有没有world这个元素,如果有,就添加一个"javaee"元素 // Iterator<String> it = list.iterator(); // while (it.hasNext()){ // String s = it.next(); // if(s.equals("world")){ // list.add("javaee"); // } // } // 优化 for(int i=0;i<list.size();i++){ String s = list.get(i); if(s.equals("world")){ list.add("javaee"); } } // 输出集合对象 System.out.println(list); } }

输出:

[hello, world, java, javaee]

5 ListIterator 列表迭代器

(1)通过List集合的listIterator()方法得到,所以说踏实List集合特有的迭代器
(2)用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

常用方法

E next():返回迭代中的下一个元素
boolean hasNext:如果迭代具有更多元素,则返回true

E previout:返回列表中的上一个元素

boolean hasPrevious:如果此列表迭代器在相反的方向遍历列表是具有更多元素,则返回true

void add(E e):将指定元素插入列表

package List; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListDemo { public static void main(String[] args) { // 创建集合对象 List<String> list = new ArrayList<String>(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); // 了解内容 不怎么用 // 通过List集合的ListIterator() 方法得到 // ListIterator<String> lit = list.listIterator(); // while (lit.hasNext()){ // String s = lit.next(); // System.out.println(s); // } // // System.out.println("--------"); // // // 逆向遍历 // while (lit.hasPrevious()){ // String s = lit.previous(); // System.out.println(s); // } // 获取列表迭代器 ListIterator<String> lit = list.listIterator(); while (lit.hasNext()){ String s = lit.next(); if(s.equals("world")){ lit.add("javaee"); } } // 输出集合对象 System.out.println(list); } }

6 List 增强for循环

增强for:简化数组和Collection集合的遍历

(1)实现Iterable接口的类允许其成为增强型for语句的目标

(2)它是JDK5之后出现的,其内部原理是一个Itera迭代器

增强for的格式

for (元素数据类型 变量名:数组或者Collection集合){ // 在此处使用变量即可,该变量就是元素 }

案例:

// 整形 int[] arr = {1, 2, 3, 4, 5, 6}; for (int i : arr) { System.out.println(i); } System.out.println("------"); // 字符串型 String[] strArray = {"A", "B", "C"}; for (String s : strArray) { System.out.println(s); } System.out.println("------"); // 集合 ArrayList<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); for(String s: list){ System.out.println(s); }

输出:

1 2 3 4 5 6 ------ A B C ------ hello world java

7 List集合存储学生对象用三种方式遍历

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序在控制台遍历该集合

思路

1、定义学生类

2、创建List集合对象

3、创建学生对象

4、把学生添加到集合

5、遍历集合

(1)迭代器:集合特有的遍历方式

(2)普通for:带有索引的遍历方式

(3)最方便的遍历方式

package ListDemo1; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListDemo { public static void main(String[] args) { // 创建List对象 List<Student> list = new ArrayList<Student>(); // 创建学生对象 Student s1 = new Student("灰太狼", 20); Student s2 = new Student("懒洋洋", 21); Student s3 = new Student("导演", 22); // 把学生添加到集合 list.add(s1); list.add(s2); list.add(s3); // 迭代器,集合特有的遍历方式 Iterator<Student> it = list.iterator(); while (it.hasNext()) { Student s = it.next(); System.out.println(s.getName() + "," + s.getAge()); } System.out.println("--------"); // 普通for:带有索引的遍历方式 for (int i = 0; i < list.size(); i++) { Student s = list.get(i); System.out.println(s.getName() + "," + s.getAge()); } System.out.println("------"); // 增强for:最方便的遍历方式 for (Student s : list) { System.out.println(s.getName() + "," + s.getAge()); } } }

输出:

灰太狼,20 懒洋洋,21 导演,22 -------- 灰太狼,20 懒洋洋,21 导演,22 ------ 灰太狼,20 懒洋洋,21 导演,22

参考地址:
https://www.bilibili.com/video/BV18J411W7cE?p=231


留言

专栏
文章
加入群聊