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


目录
相关文章
|
17天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
39 8
|
1月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
51 17
|
26天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
86 4
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
49 2
|
1月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
41 4
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
40 5
|
1月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
67 5
|
1月前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
37 3
|
2月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
24 1