java学习笔记 集合 --- List

浏览 34 次     时间 2021-08-19 13:43:45     作者 有勇气的牛排    标签 Java

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。