List详解

server/2024/12/28 5:44:23/

List详解

在Java中,List是一个接口,它继承自Collection接口。List接口为数据的有序集合提供了操作接口,其中可以包含重复的元素。这个接口的实现类以特定的方式存储元素,允许元素根据索引进行访问,同时还支持通过迭代器(Iterator)进行遍历。List接口的实现类主要有ArrayList、LinkedList和Vector等

主要特点

  1. 有序性:List中的元素是按照插入顺序存储的,因此可以通过索引来访问特定位置的元素。
  2. 允许重复:List中允许存在重复的元素
  3. 动态大小:与数组不同,List的大小是动态的,可以根据需要添加或删除元素
  4. 访问速度快:由于ArrayList等实现类是基于数组实现的,因此在随机访问元素时速度很快
  5. 可选的同步:List的实现类如ArrayList和LinkedList是非同步的,而Vector是同步的。这意味着在多线程环境中,Vector是线程安全的,但性能可能较低;而ArrayList和LinkedList则不是线程安全的,但性能较高

主要方法

·int size():返回列表中的元素个数

·boolean isEmpty():如果列表为空,则返回true

·boolean add(E e):在列表的末尾添加指定的元素

·void add(int index,E element):在列表的指定位置插入指定的元素

·boolean contains(Object o):如果列表包含指定的元素,则返回true

·Iterator<E> iterator():返回按适当顺序在列表的元素上进行迭代的迭代器 关于Iterator接口的详细知识,我们放在Iterator详解中讲

·boolean remove(Object o):从列表中移除指定元素的第一个匹配项(如果存在)

·E remove(int index):移除列表中指定位置的元素

·E get(int index):返回列表中指定位置的元素

·E set(int index,E element):用指定的元素替换列表中指定位置的元素

·int indexOf(Object o):返回指定元素在列表中首次出现的索引,如果列表不包含该元素,则返回-1

·int lastIndexOf(Object o):返回指定元素在列表中最后一次出现的索引,如果列表不包含该元素,则返回-1

·List<E> subList(int fromIndex,int toIndex):返回列表中指定的[fromIndex,toIndex)区间的部分视图

·Object[] toArray():将列表中的所有元素转换为一个Object类型的数组。由于所有类都是Object的子类,因此这个方法可以适用于任何类型的列表

·<T> T[] toArray(T[] a]:将列表中的所有元素转换为一个指定类型的数组。如果指定的数组足够大以容纳列表中的所有元素,那么列表中的元素将被复制到该数组中,并且该数组将被返回。否则,将根据需要分配一个新的数组,其运行时类型与指定数组的运行时类型相同,并且该数组将被返回

注意:

·如果指定的数组大小不足以容纳列表中的所有元素,则返回一个具有正确大小的新数组

·如果指定的数组大小大于列表的大小,则数组将被填充为null(对于引用类型)或0(对于基本类型)

示例代码:

java">    public static void main(String[] args) {List<Integer> list=new ArrayList<>();//创建一个由数组组成的List集合//1.boolean isEmpty()System.out.println(list.isEmpty());//true:为空//2.boolean add(E e)list.add(1);list.add(2);list.add(3);//3.int size()System.out.println(list.size());//3System.out.println(list.isEmpty());//false:不为空//4.boolean contains(Object o)System.out.println(list.contains(100));//false:不包含//5.void add(int index,E element)list.add(1,100);//1 100 2 3System.out.println(list.contains(100));//true:包含//6.Iterator<E> iterator()Iterator<Integer> iterator=list.iterator();//关于Iterator中的hasNext和next方法 我们在Iterator详解中讲while(iterator.hasNext()){System.out.print(iterator.next()+" ");//1 100 2 3}System.out.println();//7.boolean remove(Object o):list.remove((Integer) 100);//如果这里没有加强制转换 就会将100看成下标 这时会超出列表长度//8.List<E> subList(int fromIndex,int toIndex)System.out.println(list.subList(0,3));//1 2 3//9.E remove(int index)list.remove(0);System.out.println(list.subList(0,2));//2 3//10.E get(int index)System.out.println(list.get(1));//3//11.E set(int index,E element)list.set(1,100);System.out.println(list.subList(0,2));//2 100list.add(2,2);System.out.println(list);//2  100  2//12.int indexOf(Object o)System.out.println(list.indexOf(2));//0//13.int lastIndexOf(Object o)System.out.println(list.lastIndexOf(2));//2//14.Object[] toArray()Object[] arr=list.toArray();System.out.println(Arrays.toString(arr));//2 100//15.<T> T[] toArray(T[] a]//创建一个足够大的数组Integer[] array1=new Integer[list.size()];Integer[] str1=list.toArray(array1);System.out.println(Arrays.toString(str1));//2 100//创建一个大于 列表大小 的数组Integer[] array2=new Integer[list.size()+1];Integer[] str2=list.toArray(array2);System.out.println(Arrays.toString(str2));//2 100 null//创建一个小于 列表大小 的数组Integer[] array3=new Integer[list.size()-1];Integer[] str3=list.toArray(array3);System.out.println(Arrays.toString(str3));//2 100}

List接口的实现类

·ArrayList:基于数组实现的List。它允许对元素进行快速随机访问,但在插入和删除元素时可能性能较低(尤其是在列表的开头或中间位置)。ArrayList的大小可以动态地增长和缩减

·LinkedList:基于链表实现的List。它提供了列表的开头和结尾快速添加或删除元素的能力。然而,与ArrayList相比,LinkedList在随机访问元素时性能较低

·Vector:一个古老的、基于数组实现的、同步的List。与ArrayList类似,但所有方法是同步的,因此在多线程环境中是线程安全的。然而,由于同步的开销,Vector的性能通常比ArrayList低

关于ArrayList和LinkedList 我们之后也会进行讲解

注意:在多线程环境下,如果需要考虑线程安全性,那么可能需要使用Collections.synchronizedList方法来包装一个非同步的List,或者使用CopyOnWriteArrayList等线程安全的List实现


http://www.ppmy.cn/server/153825.html

相关文章

【分布式文件存储系统Minio】2024.12保姆级教程

文章目录 1.介绍1.分布式文件系统2.基本概念 2.环境搭建1.访问网址2.账号密码都是minioadmin3.创建一个桶4.**Docker安装miniomc突破7天限制**1.拉取镜像2.运行容器3.进行配置1.格式2.具体配置 4.查看桶5.给桶开放权限 3.搭建minio模块1.创建一个oss模块1.在sun-common下创建2.…

网络安全的学习方向和路线是怎么样的?

最近有同学问我&#xff0c;网络安全的学习路线是怎么样的&#xff1f; 废话不多说&#xff0c;先上一张图镇楼&#xff0c;看看网络安全有哪些方向&#xff0c;它们之间有什么关系和区别&#xff0c;各自需要学习哪些东西。 在这个圈子技术门类中&#xff0c;工作岗位主要有以…

Python小括号( )、中括号[ ]和大括号{}代表什么

python语言最常见的括号有三种&#xff0c;分别是&#xff1a;小括号( )、中括号[ ]和大括号也叫做花括号{ }&#xff0c;分别用来代表不同的python基本内置数据类型。 小括号&#xff08;&#xff09;&#xff1a;struct结构体&#xff0c;但不能改值 python中的小括号( )&am…

VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

中间件xxl-job安装

拉取镜像 docker pull xuxueli/xxl-job-admin:2.4.2 创建xxl-job-admin容器 docker create --name xxl-job-admin -p 9099:8080 -e PARAMS"--spring.datasource.urljdbc:mysql://192.168.96.57:3306/xxl_job2Unicodetrue&characterEncodingUTF-8 --spring.dataso…

C#都可以找哪些工作?

在国内学习C#&#xff0c;可以找的工作主要是以下4个&#xff1a; 1、游戏开发 需要学习C#编程、Unity引擎操作、游戏设计和3D图形处理等。 2、PC桌面应用开发 需要学习C#编程、WinForm框架/WPF框架、MVVM设计模式和UI/UX设计等。 3、Web开发 需要学习C#编程、ASP.NET框架…

深入理解 Docker 网桥配置与网络管理

目录 引言Docker 网络概述Docker 默认网络模式 3.1 Bridge 模式3.2 Host 模式3.3 None 模式 Docker Bridge 网络原理解析 4.1 Bridge 网络的基本架构4.2 网桥的创建与配置4.3 容器与 Bridge 的连接机制 配置自定义 Docker 网桥 5.1 创建自定义网桥5.2 配置子网和网关5.3 管理容…

统计单词:JAVA

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#xff0c;请你编程实现…