Java开发基础系列(十二):集合对象(List接口)

news2024/11/18 19:52:28
😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: Java开发基础系列(十二):集合对象(List接口)
⏱️ @ 创作时间: 2023年07月26日

在这里插入图片描述

目录

  • List 接口的实现类
    • ArrayList
    • LinkedList
    • Vector

List 接口的实现类

  • ArrayList: 动态数组实现的列表,支持快速随机访问。
  • LinkedList: 双向链表实现的列表,支持高效地插入和删除操作。
  • Vector: 类似于 ArrayList,但是是线程安全的,通常不推荐使用。

ArrayList

ArrayList 是 Java 集合框架中的一个实现类,它继承自 AbstractList,并实现了 List 接口。ArrayList主要用于存储一组有序的对象,并且可以动态地调整其大小。它是基于动态数组的数据结构,因此在访问元素时具有常数时间复杂度,即 O(1)。

ArrayList是 Java 中常用的数据结构,它允许按照顺序存储一组对象,并提供了一系列方法来对集合中的元素进行增删改查操作。由于其动态数组的特性和快速访问的优势,ArrayList 在实际开发中被广泛使用。如果需要有序集合且频繁进行增删元素操作,ArrayList 可能是一个不错的选择。

优点:

  1. 动态数组: ArrayList 提供了一个动态数组,可以根据需要自动调整大小,不需要手动管理数组大小。
  2. 有序集合: ArrayList 保留了元素的插入顺序,因此可以按照插入的顺序进行遍历和访问。
  3. 快速访问: 由于是基于数组实现的,ArrayList 支持通过索引快速访问元素,时间复杂度为 O(1)。
  4. 增删元素: ArrayList支持在列表末尾、指定索引位置以及根据元素进行增加和删除操作。

基础用法:

  • 创建 ArrayList 对象
    使用无参构造函数可以创建一个空的 ArrayList 对象,并根据需要使用 add() 方法添加元素。

    ArrayList<String> fruits = new ArrayList<>();
    fruits.add("AA");
    fruits.add("BB");
    fruits.add("CC");
    
  • 在指定位置插入元素
    使用 add(index, element) 方法可以在指定位置插入元素。

    fruits.add(1, "DD"); // 在索引 1 处插入元素 "DD"
    
  • 访问元素
    使用 get(index) 方法可以根据索引获取 ArrayList 中的元素。注意不要出现越界的情况。

    String fruit = fruits.get(0); // 获取第一个元素 "AA"
    
  • 遍历 ArrayList
    使用 for-each 循环或者传统的 for 循环可以遍历 ArrayList 中的所有元素。

    for (String fruit : fruits) {
        System.out.println(fruit);
    }
    
    // 或者使用传统的 for 循环
    for (int i = 0; i < fruits.size(); i++) {
        String fruit = fruits.get(i);
        System.out.println(fruit);
    }
    
  • 删除元素
    使用 remove(index) 方法可以根据索引删除 ArrayList中的元素,或使用 remove(Object)方法根据元素进行删除。

	fruits.remove(1); // 删除索引为1的元素 "BB"
	fruits.remove("CC"); // 删除元素 "CC"
  • 其他常用方法
	int size = fruits.size(); // 获取元素个数
	boolean isEmpty = fruits.isEmpty(); // 判断是否为空
	fruits.clear(); // 清空所有元素

在这里插入图片描述

LinkedList

LinkedList是 Java 集合框架中 List 接口的一个实现类,它使用双向链表数据结构来存储元素。LinkedList 允许快速添加和删除元素,尤其是在列表的开头和结尾进行操作,但在随机访问元素时相对较慢,是一个适用于频繁插入和删除元素的实现类。

优点:

  1. 快速插入和删除: LinkedList 使用链表结构,所以在列表的开头和结尾进行插入和删除操作的时间复杂度是 O(1),这使得它非常适合频繁的添加和移除操作。
  2. 灵活性: 由于链表的特性,LinkedList 也可以用作队列或栈的实现,支持在两端进行添加和删除操作。

基础用法:

  • 创建 LinkedList 对象
    使用无参构造函数可以创建一个空的 LinkedList 对象,并使用 add() 方法向列表中添加元素。
    LinkedList<String> linkedList = new LinkedList<>();
    linkedList.add("AA");
    linkedList.add("BB");
    linkedList.add("CC");
    
  • 在指定位置插入元素
    使用 add(index, element) 方法可以在指定位置插入元素。
    linkedList.add(1, "DD"); // 在索引 1 处插入元素 "DD"
    
  • 获取元素
    使用 get(index) 方法可以根据索引获取元素。
String firstElement = linkedList.get(0); // 获取第一个元素 "AA"
  • 删除元素
    使用 remove(index) 方法可以根据索引删除元素,或使用 remove(Object) 方法根据元素进行删除。
    linkedList.remove(2); // 删除索引 2 处的元素 "CC"
    linkedList.remove("BB"); // 删除元素 "BB"
    
  • 遍历 LinkedList
    使用 for-each 循环或者传统的 for 循环可以遍历 ArrayList 中的所有元素。
    for (String linked: linkedList) {
        System.out.println(linked);
    }
    
    // 或者使用传统的 for 循环
    for (int i = 0; i < linkedList.size(); i++) {
        String linked= linkedList.get(i);
        System.out.println(linked);
    }
    
  • 作为队列或栈使用
    LinkedList 可以通过添加和删除元素在两端实现队列或栈的操作。
    // 作为队列使用(先进先出)
    linkedList.addLast("Pineapple"); // 入队
    String firstFruit = linkedList.removeFirst(); // 出队
    
    // 作为栈使用(先进后出)
    linkedList.addFirst("Watermelon"); // 入栈
    String topFruit = linkedList.removeFirst(); // 出栈
    

Vector

Vector 是 Java 集合框架中 List 接口的一个传统实现类,它实现了动态数组的数据结构。与 ArrayList 类似,Vector 也可以动态地增加或减少元素,并且支持按索引访问元素。不过与ArrayList不同的是,Vector 是线程安全的,这意味着多个线程可以同时访问和修改 Vector 对象,而不会出现并发访问问题。

Vector是一个线程安全的动态数组实现,适用于需要在多线程环境下进行安全操作的场景。由于其线程安全特性,Vector的性能相对较低,因此在单线程环境下,如果不需要线程安全的功能,可能更适合使用 ArrayList

优点:

  • 线程安全: Vector 是线程安全的集合类,适用于多线程环境下需要安全操作的场景。
  • 动态数组: Vector 提供了动态数组的功能,可以动态地增加或减少元素的大小。

基础用法:

  • 创建 Vector 对象
    使用无参构造函数可以创建一个空的 Vector 对象,并使用 add() 方法向列表中添加元素。

    Vector<String> vector = new Vector<>();
    vector.add("AA");
    vector.add("BB");
    vector.add("CC");
    
  • 在指定位置插入元素
    使用 add(index, element) 方法可以在指定位置插入元素。

    vector.add(1, "DD"); // 在索引 1 处插入元素 "DD"
    
  • 访问元素
    使用 get(index) 方法可以根据索引获取元素。

    String firstElement = vector.get(0); // 获取第一个元素 "AA"
    
  • 遍历 Vector
    使用 for-each 循环或者传统的 for 循环可以遍历 Vector中的所有元素。

    for (String v : vector) {
        System.out.println(v);
    }
    
    // 或者使用传统的 for 循环
    for (int i = 0; i < vector.size(); i++) {
        String v= vector.get(i);
        System.out.println(v);
    }
    
  • 删除元素
    使用 remove(index) 方法可以根据索引删除 ArrayList中的元素,或使用 remove(Object)方法根据元素进行删除。

    vector.remove(2); // 删除索引 2 处的元素 "CC"
    vector.remove("BB"); // 删除元素 "BB"
    
  • 其他常用方法

    int size = vector.size(); // 获取集合中元素的个数
    boolean isEmpty = vector.isEmpty(); // 判断集合是否为空
    vector.clear(); // 清空集合中的所有元素
    

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/791453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【技术】国标GB视频平台设备接入EasyCVR后,如何获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…

esp32_arduino的开发库安装笔记

1.1 Arduino软件下载与安装 Arduino官网下载地址&#xff1a;https://www.arduino.cc/en/software。 1.2在线安装 选择文件 - 首选项。 在附加开发板管理器网址中添加以下链接中的一个。 (1)Stable release link: https://raw.githubusercontent.com/espressif/arduino-es…

2023第二届中国绿色钢铁国际大会 演讲嘉宾更新

2023第二届中国绿色钢铁国际峰会将于9月21日-22日在上海举办&#xff0c;本次会议线上线下同步举行。 峰会将从钢铁行业上中下游全产业链视角出发&#xff0c;聚焦能源及原料结构创新&#xff0c;传统高炉技术路线低碳化创新&#xff0c;氢能冶金、二氧化碳捕集、利用或储存技…

借降本增效之名,探索开闭原则架构设计

引语 在我们的研发生产活动中&#xff0c;经常会遇到如下类似的疑惑&#xff1a; 业务和技术在公司组织活动中&#xff0c;究竟应该各扮演什么样的角色&#xff1f; 技术的目的是什么&#xff1f; 研发生产活动中&#xff0c;如何提高生产事故发生的下限&#xff1f; 如何充…

el-table表格自动滚动

实现效果如下&#xff1a; 功能点&#xff1a; 1. 当表格内容超出时&#xff0c;自动滚动&#xff0c;滚动到最后一条之后在从头滚动。 2. 表格中的数据会定时刷新&#xff0c;刷新后数据更新。 3. 鼠标移入表格中&#xff0c;停止滚动&#xff1b;移出后&#xff0c;继续滚…

微信小程序数字键盘(仿微信转账键盘)

微信小程序input自带数字输入键盘&#xff0c;不过是直接调用的系统键盘&#xff0c;无法个性化。 代码中使用使用了Vant WeappVant UI小程序版&#xff0c;这里就不介绍相关安装说明了&#xff0c;大家自行安装Vant Weapp。 json 用到的组件 {"usingComponents": …

第三章:Seed,Expand and Constrain:——种子、扩展和约束:弱监督图像分割的三个原则

0.摘要 我们引入了一种新的损失函数&#xff0c;用于基于三个指导原则进行弱监督训练的语义图像分割模型&#xff1a;使用弱定位线索进行种子标记&#xff0c;根据图像中可能出现的类别信息扩展对象&#xff0c;将分割结果约束在物体边界上。我们通过实验证明&#xff0c;使用所…

【C++模板进阶】

目录 一、模板使用时的一个小注意点二、非类型模板参数三、类模板的特化3.1函数模板的特化3.2类模板的特化3.2.1全特化3.2.2偏特化 四、模板的分离编译4.1模板不支持分离编译4.2模板分离编译报错的分析4.2解决方案 五、模板的总结 一、模板使用时的一个小注意点 在使用模板时&…

创建Electron项目

一、使用vite 构建 electron项目 npm init vitelatest Need to install the following packages:create-vitelatest Ok to proceed? (y) y √ Project name: ... CertificateDownload √ Package name: ... certificatedownload √ Select a framework: Vue √ Select a var…

java正则表达式「.*?」匹配什么

先说结论&#xff1a;以非贪婪的方式匹配正则表达式".*" 举例子&#xff1a; String s "abdcababc"; String regx1 "ab(.*)c"; String regx2 "ab(.*?)c"; Pattern pattern1 Pattern.compile(regx1); Pattern pattern2 Pattern…

分组排序及首单时间计算

import pandas as pd import numpy as np downpath/Users/kangyongqing/Downloads/ downfile20230725_105033.csvddpd.read_csv(downpathdownfile) dd.rename(columns{student_user_id:学生id},inplaceTrue) result[] for i in range(dd.shape[0]):user,feetimedd.loc[i,[学生…

AES-CTR加密模式介绍 例题

文章目录 CTR&#xff08;Counter mode&#xff0c;CTR&#xff09;计数器模式题目一题目描述&#xff1a;题目分析&#xff1a; 浅记一下 CTR&#xff08;Counter mode&#xff0c;CTR&#xff09;计数器模式 原理&#xff1a; CTR将块密码变为流密码。它通过递增一个加密计数…

防御第三天

1.总结当堂NAT与双机热备原理&#xff0c;形成思维导图 2.完成课堂NAT与双机热备实验 fw1: <USG6000V1>sy [USG6000V1]int g0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.18.2 24 [USG6000V1-GigabitEthernet0/0/0]service-manage all permit (地址无所谓&…

NVM下安装NPM、CNPM详解与坑不是内部命令

设置npm的全局安装路径&#xff1a;有了可以不设置 npm config set prefix "H:\A-work\nvm\npm"C盘用户文件夹&#xff08;C:\Users[name]&#xff09;下会生成一个.npmrc的文件&#xff0c;用记事本打开后可以看到如下内容&#xff1a; 配置环境变量&#xff08;重…

Sip IP网络对讲广播模块,sip网络寻呼话筒音频模块

Sip IP网络对讲广播模块&#xff0c;sip网络寻呼话筒音频模块 模块介绍 SV-2401VP和SV-2403VPIP网络对讲广播模块是一款通用的独立SIP音频功能模块&#xff0c;可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行编解码。 该模块支持多种网络协议和音频编…

AdaBoost的求解流程

对于任意Boosting算法&#xff0c;都需要明确以下几点&#xff1a; ① 损失函数&#x1d43f;(&#x1d465;,&#x1d466;)的表达式是什么&#xff1f;损失函数如何影响模型构建&#xff1f; ② 弱评估器&#x1d453;(&#x1d465;)是什么&#xff0c;当下boosting算法使用…

这是一个小程序求助帖

求助帖 请问各位大佬们&#xff0c;在vscode中运行android模拟器&#xff0c;报错&#xff1a;执行emulator命令失败, 错误信息&#xff1a;Error: spawn C:\WINDOWS\system32\cmd.exe ENOENT 该如何解决。环境变量什么的我都已经配置过了&#xff0c;电脑也重启过了&#xff…

Rman配置参数详解

using target database control file instead of recovery catalog指的是使用目标数据库控制文件代替恢复目录 1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 设置rman备份过期条件&#xff1a;是用来决定那些备份不再需要了&#xff0c;它一共有三种可选项&…

mybatisPlus之自动填充功能及防全表更新与删除插件

自动填充功能 基本介绍 Mybatis-plus自动填充功能是指在数据库表进行增、删、改、查操作时&#xff0c;自动将某些字段的值进行填充。这些字段的值可以是当前时间、登录用户ID等。 在项目中有一些属性&#xff0c;如果我们不希望每次都填充的话&#xff0c;我们可以设置为自…

Cilium系列-5-Cilium替换KubeProxy

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于: 启用本地路由(Native Routing)完全替换 KubeProx…