当前位置: 首页 > news >正文

Java集合-ArrayList

集合就是一个保存数据的容器。在计算机中引入集合,是为了便于处理一组类似的数据。Java标准库自带的java.util包提供了集合相关的接口和实现类:Collection接口,它是除了Map接口外所有其他集合类的根接口。

Java的Java.uitl包主要提供以下三种类型的集合:

  • List:一种有序表的集合;
  • Set:一种保证没有重复元素的集合
  • Map:一种通过键值对查找的映射表集合。

Java集合的设计有几个特点:首先实现了接口和实现类相分离,比如:有序表的接口是List,具体的实现类有ArrayList、LinkedLis、Vectort;其次支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素。 

一、List集合

List集合的特点:有序、允许重复。

List的行为和数组几乎完全相同:List 内部按照放入元素的先后顺存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。

List的实现类:ArrayList、LinkedList、Vector。

1.ArrayList的内部数据结构是Object[]数组

特点:

        1.初始化为一个空数组{ }

内部源码为:

 public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}
        2.第一次添加元素时,该数组扩容为10
        3.数组容量不足时,该数组的容量扩容为原容量的1.5倍。扩容方法:grow()
int newCapacity = oldCapacity + (oldCapacity >> 1);
2.主要方法。

方法1:add(E e)  作用:添加新元素至集合的尾部

方法2:add(int index,E e) 作用:添加新元素至集合的指定位置

方法3:addAll(Collection c)  作用:添加另一个集合中所有的元素至当前集合的尾部

方法4:addAll(int index,Collection c)  作用:添加另一个集合中所有的元素至当前集合指定位置

public static void main(String[] args) {//创建集合对象ArrayList<String> list = new ArrayList<String>();//操作1:添加新元素//add(E e)方法:添加新元素至集合的尾部list.add("小乔");list.add("曹操");list.add("刘备");list.add("后裔");System.out.println(list);//add(int index,E e)方法:添加新元素至集合的指定位置list.add(0, "李白");System.out.println(list);//addAll(Collection c)方法//addAll(int index,Collection c)方法//添加另一个集合中所有的元素至当前集合ArrayList<String> subList = new ArrayList<String>();subList.add("孙悟空");subList.add("猪八戒");subList.add("白骨精");//将subList中的所有元素添加至list集合的尾部
//		list.addAll(subList);list.addAll(1,subList);System.out.println(list);}

 输出:

[小乔, 曹操, 刘备, 后裔]
[李白, 小乔, 曹操, 刘备, 后裔]
[李白, 孙悟空, 猪八戒, 白骨精, 小乔, 曹操, 刘备, 后裔]

方法5:get(int index)   作用:获取元素(按照下标位置,获取元素)

方法6:remove(int index)  作用:按照下标删除元素

             remove(Object value)  作用:按照值删除

方法7:indexOf(Object o)  作用:查找元素

方法8:set(int index,E e)  作用:按照下标,修改对应元素。

//创建临时的List集合
List<String> boyList = Arrays.asList("YK","QTZ","CBY","ZRZ","YWQ");
//全部添加至ArrayList集合中
ArrayList<String> list = new ArrayList<String>();
list.addAll(boyList);
System.out.println(list);//操作2:获取元素(按照下标位置,获取元素)
//get(int index)String first = list.get(0);
String last = list.get(list.size()-1);
System.out.println("首元素:"+first);
System.out.println("为元素:"+last);//操作3:删除元素(按照下标或值,进行删除)
//remove(int index)按照下标删除
//remove(Object value) 按照值删除
System.out.println("删除前:"+list);//list.remove(1);  //按照下标删除
list.remove("YWQ"); //按照值删除System.out.println("删除后:"+list);//操作4:查找元素
//indexOf(Object o)
int index1 = list.indexOf("ZWY");
System.out.println("查找一个不存在的元素:"+index1);int index2 = list.indexOf("YK");
System.out.println("查找一个已存在的元素:"+index2);
//操作5:修改元素
//set(int index,E e);System.out.println("修改前:"+list);
list.set(1, "QQQ");
System.out.println("修改后:"+list);

输出:

[YK, QTZ, CBY, ZRZ, YWQ]
首元素:YK
为元素:YWQ
删除前:[YK, QTZ, CBY, ZRZ, YWQ]
删除后:[YK, QTZ, CBY, ZRZ]
查找一个不存在的元素:-1
查找一个已存在的元素:0
修改前:[YK, QTZ, CBY, ZRZ]
修改后:[YK, QQQ, CBY, ZRZ]

方法9:list.clear()   作用:清空集合内的所有元素

方法10:isContains(E e)   作用:查看元素是否存在

方法11:subList(int index,int index)  作用:截取子集合

方法12:toArray()  作用:将集合转换成数组

方法13:toArray(T[ ] a)  作用:将集合转换成数组

public static void main(String[] args) {List<String> boyList = Arrays.asList("YK","QTZ","CBY","ZRZ","YWQ");//全部添加至ArrayList集合中ArrayList<String> list = new ArrayList<String>();list.addAll(boyList);System.out.println(list);//查看元素是否存在boolean isContains = list.contains("yangQi");System.out.println(isContains);//截取子集合List<String> subs = list.subList(0, 3);System.out.println(subs);//转换成数组Object[] array1 = list.toArray();//Object数组String[] array2 = list.toArray(new String[list.size()]); //String数组System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));
//		//清空list.clear();System.out.println(list);}

输出:

[YK, QTZ, CBY, ZRZ, YWQ]
false
[YK, QTZ, CBY]
[YK, QTZ, CBY, ZRZ, YWQ]
[YK, QTZ, CBY, ZRZ, YWQ]
[]
3.数组的遍历
遍历方法1:冒泡排序
public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.addAll(Arrays.asList("E","D","K","M","N","A"));//方式1:冒泡排序for(int i = 0;i<list.size()-1;i++) {for(int k = 0;k<list.size()-1-i;k++) {if(list.get(k).compareTo(list.get(k+1))>0) {String temp = list.get(k);list.set(k, list.get(k+1));list.set(k+1, temp);}}}}

输出:

[A, D, E, K, M, N]
遍历方法2:使用sort()方法
public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.addAll(Arrays.asList("E","D","K","M","N","A"));//方式2:使用sort()方法list = new ArrayList<String>();list.addAll(Arrays.asList("E","D","K","M","N","A"));list.sort(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});System.out.println(list);}

输出:

[A, D, E, K, M, N]
4.通过创建ArrayList集合
        1.通过[无参构造方法]创建ArrayList集合
		//通过[无参构造方法]创建ArrayList集合//数组默认被初始化成一个空数组ArrayList<Integer> list1 = new ArrayList<Integer>();list1.add(5178);//添加第1个元素时,将数组扩容为10list1.add(1852);//添加第2个元素list1.add(1555);//添加。。。个元素list1.add(9527);//添加第10个元素//添加第11个元素时,容量不足,再次将数组扩容,按照原容量的1.5倍list1.add(1024);
        2.通过[有参构造方法]创建Arraylist集合
		ArrayList<Integer> list2 = new ArrayList<Integer>(200);//创建集合时,传入另外一-个Collection集合, 并H.按照该集合的元素进行初始化ArrayList<Integer> list3 = new ArrayList<Integer>(Arrays.asList(1,2,3));

下一篇:LinkedList

相关文章:

Java集合-ArrayList

集合就是一个保存数据的容器。在计算机中引入集合&#xff0c;是为了便于处理一组类似的数据。Java标准库自带的java.util包提供了集合相关的接口和实现类&#xff1a;Collection接口&#xff0c;它是除了Map接口外所有其他集合类的根接口。 Java的Java.uitl包主要提供以下三种…...

数据结构·单链表经典例题

1. 移除链表元素 OJ链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 本题是说给出一个链表的头节点head和一个整数val&#xff0c;如果发现节点中存的数据有val就删掉它&#xff0c;最后返回修改后的链表头节点地址 如果题目中没有明确…...

Linux常用指令的整合

之前面试被问到了Linux相关的指令&#xff0c;所以我整理的一份常用的Linux指令列表&#xff0c;适用于大多数Linux发行版&#xff0c;现分享给大家&#xff1a; 文件操作 ls&#xff1a;列出目录内容。cd [目录]&#xff1a;更改当前目录。pwd&#xff1a;显示当前目录路径。m…...

阿里云centos安装mysql,并修改初始密码

阿里云centos安装mysql&#xff0c;并修改初始密码 安装数据库、修改初始密码、并测试建立自己的数据库步骤1&#xff1a;创建数据库和用户步骤2&#xff1a;配置Nginx1. 创建新的站点配置文件2. 编辑配置文件3. 保存并退出编辑器4. 测试配置文件是否正确5. 重新加载 Nginx 以应…...

【JavaScript基础入门】04 JavaScript基础语法(二)

JavaScript基础语法&#xff08;二&#xff09; 目录 JavaScript基础语法&#xff08;二&#xff09;变量变量是什么声明变量变量类型动态类型注释 数字与运算符数字类型算术运算符操作运算符比较运算符逻辑运算符运算符的优先级 变量 变量是什么 在计算机中&#xff0c;数据…...

标准库中的string类(下)——“C++”

各位CSDN的uu们你们好呀&#xff0c;这段时间小雅兰的内容仍然是Cstring类的使用的内容&#xff0c;下面&#xff0c;让我们进入string类的世界吧&#xff01;&#xff01;&#xff01; string类的常用接口说明 string - C Reference string类的常用接口说明 string类对象的修…...

如何使用Docker部署火狐浏览器并实现无公网ip远程访问

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器&#xff0c;由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…...

瑞_数据结构与算法_AVL树

文章目录 1 什么是AVL树1.1 AVL树的背景及定义1.2 判断失衡1.2.1 平衡因子1.2.2 失衡的四种情况1.2.2.1 LL1.2.2.2 LR1.2.2.3 RL1.2.2.4 RR 1.3 解决失衡1.3.1 左旋&#xff08;RR&#xff09;1.3.2 右旋&#xff08;LL&#xff09;1.3.3 先左旋再右旋&#xff08;LR&#xff0…...

BGP同步规则

BGP同步规则:开启同步下,从IBGP收到一条路由不会传给任何EBGP邻居(实验效果IBGP邻居和EBGP邻居都不传),除非从自身的IGP中也学到这条路由。目的是防止AS内部出现路由黑洞,向外部通告了一个本AS不可达的虚假的路由。 同步规则只影响从IBGP邻居收到的路由,不影响从EBGP邻居收…...

Linux命令-apt-key命令(管理Debian Linux系统中的软件包密钥)

补充说明 apt-key命令 用于管理Debian Linux系统中的软件包密钥。每个发布的deb包&#xff0c;都是通过密钥认证 的&#xff0c;apt-key用来管理密钥。 语法 apt-key(参数)参数 操作指令&#xff1a;APT密钥操作指令。 实例 apt-key list # 列出已保存在系统中key。 apt-…...

Python根据Excel表进行文件重命名

一、问题背景 在日常办公过程中&#xff0c;批量重命名是经常使用的操作。之前我们已经进行了初步探索&#xff0c;主要是通过批处理文件、renamer软件或者Python中的pathlib等模块对当前目录下的文件进行批量重命名。 而今天我们要使用的是PythonExcel的方法对指定目录下的文…...

【UVM源码】UVM Config_db机制使用总结与源码解析

UVM Config_db机制使用总结与源码解析 UVM Config_db机制介绍UVM Config_db 机制引入的背景基本介绍使用方法优缺点&#xff1a; UVM Config_db机制使用示例&#xff1a;UVM Config_db使用高阶规则Config_db资源优先级 UVM Config_db 源码解析 UVM Config_db机制介绍 UVM Conf…...

群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 本文主要介绍如何在群辉中开启WebDav服务&#xff0c;并结合cpolar内网穿透工具生成的公网地址&#xff0c;通过移动客户端ES文件浏览器即可实现移动设…...

通过mybatis拦截器给sql执行加一个耗时监控

代码没什么内容&#xff0c;直接贴上来吧&#xff0c;其中costTimeUtil可以看我的另一篇博文&#xff1a;java实现一个不带次数变量的加权平均值算法-CSDN博客 Slf4j Intercepts({Signature(type StatementHandler.class,method "query",args {Statement.class, …...

构建知识图谱:从技术到实战的完整指南

目录 一、概述二、知识图谱的基础理论定义与分类核心组成历史与发展 三、知识获取与预处理数据源选择数据清洗实体识别 四、知识表示方法知识表示模型RDFOWL属性图模型 本体构建关系提取与表示 五、知识图谱构建技术图数据库选择Neo4jArangoDB 构建流程数据预处理实体关系识别图…...

STM32的分类和选型

F系列&#xff08;主要用于普通应用&#xff09; STM32F0xx&#xff1a;低成本、低功耗&#xff0c;适用于成本敏感和低功耗的应用。STM32F1xx&#xff1a;中低端微控制器&#xff0c;具有丰富的外设和良好的性能。STM32F2xx&#xff1a;高性能微控制器&#xff0c;适用于要求…...

python使用read_sql与to_sql读写数据库

文章目录 详细说明示例程序 详细说明 使用pandas读写数据库的方法&#xff08;以Mysql为例&#xff09;如下&#xff1a; 首先是打包一个工具函数&#xff1a; import pandas as pd import numpy as np from sqlalchemy import create_engine, textdef get_sql_engine():# 数据…...

【ArcGIS微课1000例】0096:dem三维块状表达(层次地形模型)

文章目录 一、DEM表达方式二、层次模型表达三、注意事项一、DEM表达方式 DEM数字高程模型的表达方式通常有以下4种: 1. 规则格网 2. 不规则三角网 3. 等高线 4. 层次地形模型 作为栅格地理数据,DEM 数据具有2.5维的特征,能够以三维表面的形式进行三维空间表达。但受其数…...

OJ_糖果分享游戏

题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;void ShareCandy(vector<int>& student) {int size student.size();vector<int> share(size); //保存每个同学交换前&#xff0c;糖果数量…...

sqli-lbs靶场搭建

目录 环境小皮源码下载 1.源码解压&#xff1a; 2.搭建网站 2.1点击创建网站 2.2修改sql-connections\db-creds.inc 2.3重新启动 3.访问你设置的域名 3.1点击启动数据库配置 3.2返回第一个页面&#xff08;开启题目&#xff09; sqlilbs靶场搭建 环境小皮源码下载 下载地址&am…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...