【精通Java】集合类体系之List集合

简介: 【精通Java】集合类体系之List集合

2. list🦖


2.1 List 集合概述和特点🐶


List 集合概述:


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

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

List集合特点:


有序:存储和取出元素熟顺序一致‘’

-可重复:存储元素可以重复



public class List
extends Component
implements ItemSelectable, Accessible


List 组件为用户提供了一个可滚动的文本项列表。可设置此 list,使其允许用户进行单项或多项选择。

例如以下代码:


List lst = new List(4, false);
 lst.add("Mercury");
 lst.add("Venus");
 lst.add("Earth");
 lst.add("JavaSoft");
 lst.add("Mars");
 lst.add("Jupiter");
 lst.add("Saturn");
 lst.add("Uranus");
 lst.add("Neptune");
 lst.add("Pluto");
 cnt.add(lst);


当 cnt 为容器时,将生成以下滚动列表:

显示一个包含这些项的列表:Venus、Earth、JavaSoft 和 Mars。Javasoft 为选中状态。


如果 List 允许进行多项选择,则单击已选中的项时,将取消选中该项。在上面的示例中,一次只能从滚动列表中选择一项,因为创建新的滚动列表时,第二个参数为 false。如果 List 不允许进行多项选择,则选择某一项会导致其他选中的项取消选中。


注意,本示例中显示的列表是用四个可视行创建的。创建该列表之后,不可更改可视行的数量。默认的 List 是用四行创建的,所以 lst = new List() 与 list = new List(4, false) 等效。


代码示例:


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
List集合特点:
 - 有序:存储和取出元素熟顺序一致‘’
 -可重复:存储元素可以重复
 */
public class ListDemo01 {
    public static void main(String[] args) {
        ///创建集合对象
        List<String> l = new ArrayList<String>();
        l.add("hmm");
        l.add("20");
        l.add("20");
        l.add("der");
        //list集合继承collection,采用迭代器方法遍历集合
        Iterator<String> it = l.iterator();//集合对象调方法l.iterator,alt +enter得到迭代器对象
        while(it.hasNext()) {//判断集合是否有元素
            String s = it.next();//获取元素
            System.out.println(s);
        }
       // System.out.println(l);
    }
}

2.2 List集合特有方法🦜


方法名

说明

void add(int index,E element)

在集合中指定位置插入指定元素

E remove(int index)

删除指定索引处的元素,返回被删除的元素

E set(int index,E element)

修改指定索引处元素,返回被修改的元素

E get(int index)

返回指定索引处的元素


import java.util.ArrayList;
import java.util.List;
//void add(int index,E element)|在集合中指定位置插入指定元素
//E remove(int index)|删除指定索引处的元素,返回被删除的元素
//E set(int index,E element)|修改指定索引处元素,返回被修改的元素
//E get(int index)|返回指定索引处的元素
public class ListDemo02 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        list.add("java");
        //void add(int index,E element)|在集合中指定位置插入指定元素
        //list.add(0,"hmm");
       // list.add(5,"hm");IndexOutOfBoundsException: Index: 5, Size: 4
        //E remove(int index)|删除指定索引处的元素,返回被删除的元素
        //list.remove(2);
        //E set(int index,E element)|修改指定索引处元素,返回被修改的元素
        //list.set(2,"python");
        E get(int index)|返回指定索引处的元素
        //System.out.println(list.get(1));
        //输出集合
        System.out.println(list);
    }
}


2.3 并发修改异常🐢


并发修改异常


ConcurrentModificationException

产生原因


迭代器遍历过程中,通过集合对象中元素的长度,造成了迭代器获取元素中判断预期修改值与实际值不一致

解决方案


用for循环遍历,然后集合对象做对应的操作即可


总结:


不是不能修改,是迭代过程不能增加或者减少元素个数,set还是可以的

List集合是一个单独的参数,lterator迭代器也是一个单独的参数

lterator迭代器是依赖集合存在的,lterator迭代器参数具体内容是通过list方法获取的

也就跟复制粘贴一样,你原来的内容都通过add增加了内容

所以它实际是判断你生成迭代器后,原来的List集合的内容有被修改过没,不然就需要重新生成一次迭代器


2.4 ListIterator🐣


ListIterator:列表迭代器


通过List集合的ListIterator()方法得到,所以说它是list集合特有迭代器

系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。长度为 n 的列表的迭代器有 n+1 个可能的指针位置,如下面的插入符举例说明:


Element(0) Element(1) Element(2) … Element(n-1)
cursor positions: ^ ^ ^ ^ ^
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/*
 - 通过List集合的ListIterator()方法得到,所以说它是list集合特有迭代器
>==系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。
 */
public class ListIteratorDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> l = new ArrayList<String>();
        //添加元素
        l.add("hello");
        l.add("world");
        l.add("java");
    /*    //通过List集合的ListIterator()方法得到,所以说它是list集合特有迭代器
        ListIterator<String> li = l.listIterator();
        while(li.hasNext()) {
            String s = li.next();
            System.out.println(s);
        }
        System.out.println("-----------------------");
        // boolean hasPrevious()
        //          如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
        //ListIterator<String> lt1 = l.listIterator();
        while(li.hasPrevious()) {
            String s1 = li.previous();
            System.out.println(s1);
        }*/
        //获取列表迭代器
        ListIterator<String> li = l.listIterator();
        while(li.hasNext()) {
            String s = li.next();
            if(s.equals("world")){
                li.add("javaee");
            }
        }
        System.out.println(l);
    }
}


目录
相关文章
|
10天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
27 1
|
10天前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
24 0
java基础(13)String类
|
4天前
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
26 14
|
11天前
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
25 10
|
6天前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
10 3
|
8天前
|
安全 Java 编译器
java访问类字段
java访问类字段
|
10天前
|
Java
java的class类
java的class类
18 5
|
10天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
11天前
|
Java 数据处理
Java Scanner 类详解
`Scanner` 类是 Java 中 `java.util` 包提供的强大工具,用于从多种输入源(如键盘、文件、字符串)读取数据。本文详细介绍如何创建 `Scanner` 对象并使用其常用方法(如 `next()`, `nextInt()`, `nextLine()` 等)。通过示例代码展示如何从标准输入、字符串及文件中读取数据,并进行输入验证。使用时需注意关闭 `Scanner` 以释放资源,并确保输入类型匹配,避免异常。掌握 `Scanner` 可显著提升程序的数据处理能力。
|
17天前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
下一篇
无影云桌面