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

java集合(1)

目录

一.集合概述

二. 集合体系概述

1. Collection接口

1.1 List接口

1.2 Set接口

2. Map接口

三. ArrayList

1.ArrayList常用方法

2.ArrayList遍历

2.1 for循环

2.2 增强for循环

2.3 迭代器遍历


一.集合概述

我们经常需要存储一些数据类型相同的元素,之前我们学过的容器就是数组,但是数组存在一个问题

1.数组的长度一旦确定就不能改变

但是我们在实际开发中,往往需要动态增长的容器来帮我们存储数据,显然只用数组的话需要自己去创建新数组并拷贝元素,这大大降低了开发效率,所以java提供了底层不同实现的数据结构的容器称为集合

二. 集合体系概述

1. Collection接口

Collection是一个接口,里面可以定义抽象方法,常量,静态方法,默认方法(jdk8及之后),该接口是单列集合的父接口,其中主要用于定义一些单列集合通用的方法,例如:单列集合的增删改查

1.1 List接口

 List接口继承了Collection接口,List接口下的实现类允许出现重复元素,可以用索引和迭代器访问,主要有ArrayList,LinkedList,Vector等实现类

1.2 Set接口

Set接口同样继承了Collection接口,Set接口下的实现类不允许出现重复元素,且不能用索引访问,只能用迭代器访问,主要有HashSet,TreeSet等实现类

2. Map接口

Map是一个接口,里面可以定义抽象方法,常量,静态方法,默认方法(jdk8及之后),该接口是双列(键值对存储)集合的父接口,其中主要定义一些双列集合通用的方法,例如:双列集合的增删改查,主要有HashMap等实现类

三. ArrayList

ArrayList是List接口下的一个实现类,底层是一个可以动态增长的数组,所有的集合容器中都可以添加任意类型的数据,但为了使用时的统一,用一个<>指明集合中的元素类型,这是泛型,例如:<String>

1. ArrayList常用方法

size()返回集合中实际元素个数
add(E e)向集合末尾添加元素,添加成功返回true,添加失败返回false
add(int index,E e)向指定位置处添加元素
remove(Object o)删除指定内容的元素,删除成功返回true,删除失败返回false
remove(int index)删除指定位置处的元素,删除成功会把该值返回
get(int index)获取指定位置处的元素
indexOf(Object o)从左向右查找指定元素,找到返回下标,找不到返回-1
lastIndexOf(Object o)从右向左查找指定元素,找到返回下标,找不到返回-1
set(int index,E element)用指定的元素替换指定位置的元素,同时返回旧元素
isEmpty()判断集合是否为空
contains(Object o)判断集合中是否包含指定元素

四. LinkedList

LinkedList是List接口下的一个实现类,底层是链表结构

1.LinkedList常用方法

int size()返回集合中的元素个数
boolean add(E e)向集合尾部添加指定元素,添加成功返回true,添加失败返回false
void add(int index,E element()向指定位置添加指定元素
        E get(int index)获取指定位置的元素
boolean remove(Object o)删除指定元素,删除成功返回true,删除失败返回false
E remove(int index)删除指定位置的元素,并将其返回
E remove()删除头部的元素并返回
void addFirst(E e)向头部添加元素
E removeLast()删除尾部元素并返回
void addLast(E e)向尾部添加元素
E pop()删除头部元素并返回
void clear()清空链表元素
boolean isEmpty()判断链表是否为空
boolean contains(Object o)判断链表中是否包含指定元素

五. Vector

vector和ArrayList底层都是数组,且两者所拥有的方法也都是相同的,唯一的不同是,Vector的方法中被synchronized修饰,是线程安全的,它们两者的关系就好像StringBuffer和StringBuilder的关系一样

六. List接口下的实现类的遍历

这里以ArrayList为例,LinkedList和vector也是类似的

1. for循环

public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("a");arrayList.add("a");arrayList.add("b");arrayList.add("c");arrayList.add("d");for(int i = 0;i < arrayList.size(); i++){if("a".equals(arrayList.get(i))){arrayList.remove("a");i--;}}}
}

注意:用for循环删除集合中的元素时要注意索引和元素位置的变化,将索引减回去,避免删除元素不彻底

2. 增强for循环

public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("a");arrayList.add("a");arrayList.add("b");arrayList.add("c");arrayList.add("d");/*2.增强for循环增强for循环遍历元素时,不允许修改集合元素(删除,添加)*/for(String s:arrayList){//arrayList.remove(s);System.out.print(s+" ");//arrayList.add("1");}}
}

 注意:在使用增强for循环遍历集合时不能对集合进行增删改查等操作 

3. 迭代器遍历

public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("a");arrayList.add("a");arrayList.add("b");arrayList.add("c");arrayList.add("d");/*迭代器遍历*///获得集合对象的迭代器对象Iterator<String> it = arrayList.iterator();//正向遍历while(it.hasNext()) {String s = it.next();//获取到下一个元素System.out.print(s+" ");/*if(s.equals("b")){it.remove();//使用迭代器对象删除元素}*/}System.out.println();//ListIterator 迭代器 只能对List接口下的实现类遍历//listIterator(index);可以从指定的位置开始向前或者向后遍历ListIterator<String> listIterator = arrayList.listIterator(1);while(listIterator.hasNext()){System.out.print(listIterator.next()+" ");}System.out.println();//反向遍历ListIterator<String> listIterator1 = arrayList.listIterator(arrayList.size());while(listIterator1.hasPrevious()){System.out.print(listIterator1.previous()+" ");}}
}

使用迭代器遍历集合是更推荐的方法,它既可以在遍历时对集合进行操作,也不用自己去管下一个元素是否会被略过

 

相关文章:

java集合(1)

目录 一.集合概述 二. 集合体系概述 1. Collection接口 1.1 List接口 1.2 Set接口 2. Map接口 三. ArrayList 1.ArrayList常用方法 2.ArrayList遍历 2.1 for循环 2.2 增强for循环 2.3 迭代器遍历 一.集合概述 我们经常需要存储一些数据类型相同的元素,之前我们学过…...

分布式数据库HBase:从零开始了解列式存储

在接触过大量的传统关系型数据库后你可能会有一些新的问题: 无法整理成表格的海量数据该如何储存? 在数据非常稀疏的情况下也必须将数据存储成关系型数据库吗? 除了关系型数据库我们是否还有别的选择以应对Web2.0时代的海量数据? 如果你也曾经想到过这些问题, 那么HBase将是…...

接口测试流程及测试点!

一、什么时候开展接口测试 1.项目处于开发阶段&#xff0c;前后端联调接口是否请求的通&#xff1f;&#xff08;对应数据库增删改查&#xff09;--开发自测 2.有接口需求文档&#xff0c;开发已完成联调&#xff08;可以转测&#xff09;&#xff0c;功能测试展开之前 3.专…...

已经安装deveco-studio-4.1.3.500的基础上安装deveco-studio-3.1.0.501

目录标题 1、执行exe文件后安装即可2、双击devecostudio64_3.1.0.501.exe2.1、安装Note (注意和4.1的Note放不同目录)2.2、安装ohpm (注意和4.1版本的ohpm放不同目录)2.3、安装SDK (注意和4.1版本的SDK放不同目录) 1、执行exe文件后安装即可 2、双击devecostudio64_3.1.0.501.e…...

【C++】 解决 C++ 语言报错:Use of Uninitialized Variable

文章目录 引言 使用未初始化的变量&#xff08;Use of Uninitialized Variable&#xff09;是 C 编程中常见且危险的错误之一。它通常在程序试图使用尚未赋值的变量时发生&#xff0c;导致程序行为不可预测&#xff0c;可能引发运行时错误、数据损坏&#xff0c;甚至安全漏洞。…...

2024年7月6日 十二生肖 今日运势

小运播报&#xff1a;2024年7月6日&#xff0c;星期六&#xff0c;农历六月初一 &#xff08;甲辰年庚午月辛未日&#xff09;&#xff0c;法定节假日。 红榜生肖&#xff1a;猪、马、兔 需要注意&#xff1a;狗、鼠、牛 喜神方位&#xff1a;西南方 财神方位&#xff1a;正…...

ubuntu丢失网络/网卡的一种原因解决方案

现象 开机进入ubuntu后发现没有网络&#xff0c;无论是在桌面顶部状态栏的快捷键 还是 系统设置中&#xff0c;都没有”有线网“和”无线网“的选项&#xff0c;”代理“的选项是有的使用数据线连接电脑和手机&#xff0c;手机开启”通过usb共享网络“&#xff0c;还是没有任何…...

第6篇 共识机制深度解析:PoW、PoS、DPoS和PBFT

在区块链的世界里,有一个非常重要的概念叫做“共识机制”。它就像是区块链的心脏,保证大家在这条链上的信息是可靠的、不可篡改的。今天,我们就来通俗易懂地聊聊区块链里的四大共识机制:工作量证明(PoW)、权益证明(PoS)、委托权益证明(DPoS)和拜占庭容错(PBFT)。为…...

Windows环境使用SpringBoot整合Minio平替OSS

目录 配置Minio环境 一、下载minio.exe mc.exe 二、设置用户名和密码 用管理员模式打开cmd 三、启动Minio服务器 四、访问WebUI给的地址 SpringBoot整合Minio 一、配置依赖&#xff0c;application.yml 二、代码部分 FileVO MinioConfig MinioUploadService MinioController 三…...

LeetCode 196, 73, 105

目录 196. 删除重复的电子邮箱题目链接表要求知识点思路代码 73. 矩阵置零题目链接标签简单版思路代码 优化版思路代码 105. 从前序与中序遍历序列构造二叉树题目链接标签思路代码 196. 删除重复的电子邮箱 题目链接 196. 删除重复的电子邮箱 表 表Person的字段为id和email…...

在Apache HTTP服务器上配置 TLS加密

安装mod_ssl软件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此时查看监听端口多了一个443端口 自己构造证书 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…...

C语言力扣刷题11——打家劫舍1——[线性动态规划]

力扣刷题11——打家劫舍1和2——[线性动态规划] 一、博客声明二、题目描述三、解题思路1、线性动态规划 a、什么是动态规划 2、思路说明 四、解题代码&#xff08;附注释&#xff09; 一、博客声明 找工作逃不过刷题&#xff0c;为了更好的督促自己学习以及理解力扣大佬们的解…...

房屋租赁管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;中介管理&#xff0c;房屋信息管理&#xff0c;房屋类型管理&#xff0c;租房订单管理&#xff0c;租房信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;房屋信息&am…...

oracle sql语句 排序 fjd = ‘0101‘ 排在 fjd = ‘0103‘ 的前面

要实现这个排序需求&#xff0c;你可以使用 CASE 表达式来自定义排序逻辑。假设你有一个表格名为 your_table&#xff0c;并且有一个字段 fjd 存储类似 ‘0101’, ‘0103’ 这样的值&#xff0c;你可以这样编写 SQL 查询&#xff1a; SELECT * FROM your_table ORDER BY CASE …...

初试成绩占比百分之70!计算机专硕均分340+!华中师范大学计算机考研考情分析!

华中师范大学&#xff08;Central China Normal University&#xff09;简称“华中师大”或“华大”&#xff0c;位于湖北省会武汉&#xff0c;是中华人民共和国教育部直属重点综合性师范大学&#xff0c;国家“211工程”、“985工程优势学科创新平台”重点建设院校&#xff0c…...

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十)-git(2)

下面是一些git的常用命令和基本操作&#xff0c;可以当做平常的笔记查询&#xff0c;用于学习&#xff01;&#xff01;&#xff01; 文章目录 前言 一、git 二、git常用命令 总结 前言 下面是一些git的常用命令和基本操作&#xff0c;可以当做平常的笔记查询&#xff0c;用于…...

JMH320【亲测】【御剑九歌】唯美仙侠手游御剑九歌+WIN学习手工端+视频教程+开服清档+运营后台+授权GM物品充值后台

资源介绍&#xff1a; 这也是仙梦奇缘的一个游戏 注意&#xff1a;外网14位IP或域名 ———————————————————————————————————– ps后台介绍: 1区运营后台&#xff1a;http://ip:9981/admin/admintool/ 2区运营后台&#xff1a;http://ip…...

【matlab】信号分解/故障诊断——智能优化算法优化VMD

目录 引言 应用领域 VMD代码实现 智能优化算法优化VMD 引言 VMD&#xff08;变分模态分解&#xff09;是一种新的非线性自适应信号分解方法&#xff0c;它通过变分原理将复杂信号分解为若干个具有不同频率中心和带宽的本征模态函数&#xff08;Intrinsic Mode Functions, …...

【重磅】万能模型-直接能换迪丽热巴的模型

万能模型&#xff0c;顾名思义&#xff0c;不用重新训练src&#xff0c;直接可以用的模型&#xff0c;适应大部分原视频脸 模型用法和正常模型一样&#xff0c;但可以跳过训练阶段&#xff01;直接到合成阶段使用该模型 本模型没有做Xseg&#xff0c;对遮挡过多的画面不会自动适…...

Web基础和HTTP协议

web基础与HTTP协议: web:就是我们所说的网页。打开网站展示的页面。(全球广域网&#xff0c;万维网) world wide web 分布式图形信息系统 http https 超文本传输协议 分布式:计算机系统或者应用程序分布在多台计算机或者服务器上。通过计算机网络互相通信和协作。共同完成任…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...