Java 集合之List

server/2024/9/23 6:19:34/

一、集合常用API

1.添加相关的方法

add(E e)  确保此collection包含指定的元素(可选操作)

addAll(Collection<? extends E>  c)  将指定集合中的元素都添加到此集合中(可选操作)

2.删除相关的方法

clear()   移除这个集合中所有的元素(可选操作)

remove(Object o)  从此集合中移除指定元素的单个存在实例(可选操作)

removeAll(Collection<?> c)  移除此集合中那些也包含在指定集合中的所有元素(可选操作)

3.判断相关的方法

contains(Object o)  如果此collection包含指定的元素,则返回true。

containsAll(Collection<?>  c)  如果此集合包含指定集合中的所有元素,则返回true。

isEmpty()  如果此集合不包含元素,则返回true。

4.数组的转换相关方法

toArray()  返回此集合中所有元素的数组

二、List集合

List简介

List是有序的集合,就像数组一样。而List可以理解为是一个长度可变的数组,而且提供了丰富的API。List集合底层就是数组。

java"> public static void main(String[] args) {//创建一个List的集合List list = new ArrayList();//向末尾添加元素list.add("张三");//0list.add("李四");//1list.add("王五");//2System.out.println(list);//我们在1处的索引位置来插入元素,我们插入一个元素,该索引后面的元素都会向后一位list.add(1,"晁盖");System.out.println(list);//创建一个集合List list1 = new ArrayList();list1.add("一");list1.add("二");list1.add("三");list.addAll(list1);System.out.println(list);}

List迭代器Listlterator

jdk1.8文档下的方法

Iterator<E> iterator()   返回在此collection 的元素上进行迭代的迭代器。

通过ListIterator的方式遍历

java"> public static void main(String[] args) {List list = new ArrayList<>();list.add("张三");//0list.add("李四");//1list.add("赵六");//2list.add("王五");//3list.add("赵六");//4ListIterator listIterator = list.listIterator();while (listIterator.hasNext()){//获得迭代的元素String str = (String) listIterator.next();if ("赵六".equals(str)){//不能在一边遍历的时候一边操作集合,这样会有多线程的并发问题//list.add("任七")这个是不行的//迭代器可以给我们提供了一个add方法让我们避免并发问题,但是添加的时候本次遍历不生效listIterator.add("任七");}System.out.println(str);}System.out.println(list);}

使用for循环来动态的遍历List集合

java">public static void main(String[] args) {List list = new ArrayList<>();list.add("张三");//0list.add("李四");//1list.add("赵六");//2list.add("王五");//3list.add("赵六");//4for (int i=0;i<list.size();i++){//根据索引来获得对应的元素String str = (String) list.get(i);if ("赵六".equals(str)){list.add("任七"); //加在末尾}System.out.println(str);}System.out.println(list);}

List中元素是可以重复的

三、List实现类

ArrayList

特点
  • ArrayaList的底层是数组的原理
  • ArrayList中的元素可以重复
  • ArrayList是有序的集合,长度不固定
  • ArrayList不是线程安全的集合,适合不要求线程安全的需求来实现
  • 效率高,性能高
  • 如果线程要是同步的话,性能就会贬低

长度变化:

  1. 初始容量:当你创建一个 ArrayList 时,如果没有指定初始容量,它通常有一个默认的容量大小(在 Java 8 中,默认为 10)。如果你知道将要存储的元素数量,可以在创建时指定一个初始容量。

  2. 添加元素:当你向 ArrayList 添加元素时,如果添加后元素数量超过了当前容量,ArrayList 会自动进行扩容。扩容过程通常包括以下步骤:

    • 计算新的容量:通常是当前容量的1.5倍,加上1(以保持整数)。
    • 创建一个新的数组,其大小等于新计算出的容量。
    • 将旧数组中的所有元素复制到新数组中。
    • 将新数组赋值给 ArrayList 的内部数组引用。

LinkedList 

特点

1.LinkedList也不是线程安全的

2.底层结构是链表实现

3.有序集合,更适合做增删改的业务场景

链表:存储了元素和前后的地址

LinkedList是链表为原理,添加修改删除的效率高

Vector

Vector底层也是数组,是线程安全的

java">  public static void main(String[] args) {Vector v = new Vector();v.add("张三");v.add("李四");v.add("王五");Object o = v.get(1);System.out.println(o);System.out.println("------------------------------------");for (int i = 0;i<v.size();i++){Object o1 = v.get(i);System.out.println(o1);}System.out.println("------------------------------------");Enumeration elements = v.elements();while (elements.hasMoreElements()){Object o1 = elements.nextElement();System.out.println(o1);}//while (elements.hasMoreElements()) 这是一个while循环,它会一直执行,直到elements中没有更多的元素。hasMoreElements()方法是Enumeration接口的一部分,用于检查是否还有更多的元素可以遍历。//Object o1 = elements.nextElement(); 这行代码调用nextElement()方法,它会返回Enumeration中的下一个元素。每次调用nextElement()时,都会返回序列中的下一个元素,并将内部指针向前移动。}


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

相关文章

深度学习500问——Chapter13:优化算法(1)

文章目录 13.1 如何解决训练样本少的问题 13.2 深度学习是否能胜任所有数据集 13.3 有没有可能找到比已知算法更好的算法 13.4 什么是共线性&#xff0c;如何判断和解决共线性问题 13.5 权值初始化方法有哪些 13.6 如何防止梯度下降陷入局部最优解 13.7 为什么需要激活函数 13.…

LabVIEW中10μs方波生成问题

在LabVIEW中使用NI PCIe-6353卡生成并控制10μs级别的方波输出可能遇到频率调整的问题。下面将详细分析常见问题的原因&#xff0c;如采样率设置、时钟源配置、波形生成方式等&#xff0c;并提供具体的解决方案&#xff0c;帮助用户成功生成并调整高精度方波信号。 为了在LabVI…

神州数码半年业绩双增长,AI驱动数云服务及软件业务增长62.7%

发布 | 大力财经 8月30日晚间&#xff0c;神州数码集团&#xff08;000034.SZ&#xff09;发布2024年度中期业绩报告。 报告期内&#xff0c;神州数码营业收入实现625.6亿元&#xff0c;同比增长12.5%&#xff1b;归母净利润实现5.1亿元&#xff0c;同比增长17.5%&#xff1b…

国产SRAM存储芯片替代方案

为满足客户对更大更快的SRAM 的普遍需求&#xff0c;伟凌创芯SRAM产品线&#xff0c;容量最高可达64Mb。产品线包括提供256Kb~64Mb不同容量的器件&#xff0c;为传统的并行SRAM产品提供成本更低的替代方案&#xff0c;并在SRAM存储器中包含可选的电池备份切换电路&#xff0c;以…

【C++】如何解决“pointer to incomplete class type is not allowed”。

这个错误信息 “pointer to incomplete class type is not allowed” 在 C 中通常表示你正在尝试使用一个尚未完全定义的类的指针。 可能的原因及解决方法如下&#xff1a; 一、类定义不完整 前向声明后就使用指针&#xff1a; 如果你只是对一个类进行了前向声明&#xff08…

【Qt】Spacer

Spacer 在使用布局管理的时候&#xff0c;如果需要在控件之间添加一段空白&#xff0c;就可以使用QSpacerItem来表示。 核心属性 属性说明 width 宽度 height ⾼度 hData ⽔平⽅向的 sizePolicy QSizePolicy::Ignored : 忽略控件的尺⼨&#xff0c;不对布局产⽣影响。 QS…

通过C# 读取PDF页面大小、方向、旋转角度

在处理PDF文件时&#xff0c;了解页面的大小、方向和旋转角度等信息对于PDF的显示、打印和布局设计至关重要。本文将介绍如何使用免费.NET 库通过C#来读取PDF页面的这些属性。 文章目录 C# 读取PDF页面大小&#xff08;宽度、高度&#xff09;C# 判断PDF页面方向C# 检测PDF页面…

EasyCVR视频汇聚平台:巧妙解决WebRTC无法播放H.265视频的难题

随着科技的飞速发展&#xff0c;视频监控已经成为现代安全管理不可或缺的一部分&#xff0c;广泛应用于智慧工地、智慧煤矿、智慧工厂、智慧社区和智慧校园等多个领域。在这个过程中&#xff0c;视频编码技术和实时通信技术显得尤为重要。EasyCVR视频汇聚平台&#xff0c;凭借其…