【精通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);
    }
}


目录
相关文章
|
2月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
221 101
|
2月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
274 100
|
30天前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
80 4
|
1月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
136 5
|
1月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
113 4
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
119 1
|
1月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
179 1
|
1月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
129 0
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
133 1
|
1月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
233 5