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

java基础-集合

1、集合

        在java中,集合(Collection)指的是一组数据容器,它可以存储多个对象,并且允许用户通过一些方法来访问与操作这些对象。j

        集合的实现原理都基于数据结构和算法,如下:

数据结构

  • 线性表: 数组,链表(单链表,双链表),栈,队列(普通队列,双端队列)。
  • 散列表: 散列函数(哈希算法)。
  • 树: 平衡二叉树,二叉查找树,平衡二叉查找树(红黑树)。

算法

  • 排序算法: 冒泡排序,插入排序,选择排序,归并排序。
  • 搜索: 深度优先搜索,广度优先搜索。
  • 查找: 线性表查找,树结构查找,散列表查找。

 2、java集合

2.1、java集合框架图(只做了解)

从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类。

2.2、集合框架体系图

Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java.util包中, 所以当使用集合框架的时候需要进行导包。

2.3、常用的集合框架

        2.3.1、ArrayList       

        ArrayList实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用插入删除效率低

        PS:数组的特点:查询快,增删慢

        当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0 ,第一次添加则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5 倍

        ps:

        JDK 1.7:直接创建一个初始容量为10的数组
        JDK 1.8:一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组

        如过一次性添加多个元素,1.5倍放不下,则新创建数组的长度以实际为准

        三种构建方式

  • ArrayList():构造一个默认大小为10容量的空列表。
  • ArrayList(int initialCapacity):构造一个大小为指定int initialCapacity容量的空列表。
  • ArrayList(Collection c):构造一个和参数c相同元素的ArrayList对象

 常用api:

add()	将元素插入到指定位置的 arraylist 中
addAll()	添加集合中的所有元素到 arraylist 中
clear()	删除 arraylist 中的所有元素
clone()	复制一份 arraylist
contains()	判断元素是否在 arraylist
get()	通过索引值获取 arraylist 中的元素
indexOf()	返回 arraylist 中元素的索引值
removeAll()	删除存在于指定集合中的 arraylist 里的所有元素
remove()	删除 arraylist 里的单个元素
size()	返回 arraylist 里元素数量
isEmpty()	判断 arraylist 是否为空
subList()	截取部分 arraylist 的元素
set()	替换 arraylist 中指定索引的元素
sort()	对 arraylist 元素进行排序
toArray()	将 arraylist 转换为数组
toString()	将 arraylist 转换为字符串
ensureCapacity()	设置指定容量大小的 arraylist
lastIndexOf()	返回指定元素在 arraylist 中最后一次出现的位置
retainAll()	保留 arraylist 中在指定集合中也存在的那些元素
containsAll()	查看 arraylist 是否包含指定集合中的所有元素
trimToSize()	将 arraylist 中的容量调整为数组中的元素个数
removeRange()	删除 arraylist 中指定索引之间存在的元素
replaceAll()	将给定的操作内容替换掉数组中每一个元素
removeIf()	删除所有满足特定条件的 arraylist 元素
forEach()	遍历 arraylist 中每一个元素并执行特定操作

2.3.2、LinkedList

        LinkedList实现了List接口,允许有null(空)元素。LinkedList的底层是 双向链表结构。由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在任意位置插入或者删除元素时,不需要搬移元素,效率比较高

        构建方式:

  • LinkedList():构造一个空的LinkedList对象。
  • LinkedList(Collection c):构造一个和参数c相同元素的LinkedList对象。

         PS:链表表不存在容量不足的问题,没有扩容机制

  常用api:

public boolean add(E e)	链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public void add(int index, E element)	向指定位置插入元素。
public boolean addAll(Collection c)	将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。
public boolean addAll(int index, Collection c)	将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。
public void addFirst(E e)	元素添加到头部。
public void addLast(E e)	元素添加到尾部。
public boolean offer(E e)	向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public boolean offerFirst(E e)	头部插入元素,返回是否成功,成功为 true,失败为 false。
public boolean offerLast(E e)	尾部插入元素,返回是否成功,成功为 true,失败为 false。
public void clear()	清空链表。
public E removeFirst()	删除并返回第一个元素。
public E removeLast()	删除并返回最后一个元素。
public boolean remove(Object o)	删除某一元素,返回是否成功,成功为 true,失败为 false。
public E remove(int index)	删除指定位置的元素。
public E poll()	删除并返回第一个元素。
public E remove()	删除并返回第一个元素。
public boolean contains(Object o)	判断是否含有某一元素。
public E get(int index)	返回指定位置的元素。
public E getFirst()	返回第一个元素。
public E getLast()	返回最后一个元素。
public int indexOf(Object o)	查找指定元素从前往后第一次出现的索引。
public int lastIndexOf(Object o)	查找指定元素最后一次出现的索引。
public E peek()	返回第一个元素。
public E element()	返回第一个元素。
public E peekFirst()	返回头部元素。
public E peekLast()	返回尾部元素。
public E set(int index, E element)	设置指定位置的元素。
public Object clone()	克隆该列表。
public Iterator descendingIterator()	返回倒序迭代器。
public int size()	返回链表元素个数。
public ListIterator listIterator(int index)	返回从指定位置开始到末尾的迭代器。
public Object[] toArray()	返回一个由链表元素组成的数组。
public T[] toArray(T[] a)	返回一个由链表元素转换类型而成的数组。

2.3.2、HashMap

  • HashMap 是一个散列表,它存储的内容是键值对(key-value)映射,默认长度是16,扩容因子0.75。
  • HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
  • HashMap 是无序的,即不会记录插入的顺,线程不安全,key、value 都可以为 null,key是包装类型。
  • HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
  • jdk1.7采用头插法,由数组 + 链表 组成,链表是为了解决哈希冲突。
    jdk1.8采用尾插法,由数组 + 链表+红黑树。(红黑树条件:链表长度大于8,且数组长度大于64)。

 常用api:

clear()	删除 hashMap 中的所有键/值对
clone()	复制一份 hashMap
isEmpty()	判断 hashMap 是否为空
size()	计算 hashMap 中键/值对的数量
put()	将键/值对添加到 hashMap 中
putAll()	将所有键/值对添加到 hashMap 中
putIfAbsent()	如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。
remove()	删除 hashMap 中指定键 key 的映射关系
containsKey()	检查 hashMap 中是否存在指定的 key 对应的映射关系。
containsValue()	检查 hashMap 中是否存在指定的 value 对应的映射关系。
replace()	替换 hashMap 中是指定的 key 对应的 value。
replaceAll()	将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。
get()	获取指定 key 对应对 value
getOrDefault()	获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
forEach()	对 hashMap 中的每个映射执行指定的操作。
entrySet()	返回 hashMap 中所有映射项的集合集合视图。
keySet()	返回 hashMap 中所有 key 组成的集合视图。
values()	返回 hashMap 中存在的所有 value 值。
merge()	添加键值对到 hashMap 中
compute()	对 hashMap 中指定 key 的值进行重新计算
computeIfAbsent()	对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hasMap 中
computeIfPresent()	对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。

相关文章:

java基础-集合

1、集合 在java中,集合(Collection)指的是一组数据容器,它可以存储多个对象,并且允许用户通过一些方法来访问与操作这些对象。j 集合的实现原理都基于数据结构和算法,如下: 数据结构&#xff1…...

【C++11】auto与decltype关键字使用详解

系列文章目录 C11新特性使用详解-持续更新 文章目录 系列文章目录前言一、auto关键字1.根据变量的初始化表达式来推导变量的类型2.const与引用 二、decltype关键字1.推断表达式的类型2.const与引用 三、总结 前言 auto和decltype是C11引入的俩个重要的新关键字,用…...

Servlet实现一个简单的表白墙网站

文章目录 前言效果展示事前准备HTML、CSS、JavaScript分别负责哪些HTML和CSS构架出页面的基本结构和样式JavaScript 实现行为和交互实现服务器端的业务代码整理pom.xmlweb.xmlmessageWall.htmlMessageServlet.java 前言 前面我们学习了 Java 中知名的 HTTP 服务器 tomcat 的安…...

mysql 集群恢复

准备使用集群的时候发现集群起不来, 发现抱错集群各个节点都是readonly 状态,找了很多资料,由于集群处于不一致的情况需要防止不同的节点数据写入脏数据 取消节点readonly 方法如下: MySQL 取消 super read only 直接关闭read…...

基于STM32的色彩识别与分类算法优化

基于STM32的色彩识别与分类算法优化是一项与图像处理和机器学习相关的研究任务,旨在实现高效的色彩识别和分类算法在STM32微控制器上的运行。本文将介绍基于STM32的色彩识别与分类算法优化的原理和实现步骤,并提供相应的代码示例。 1. 色彩识别与分类概…...

阿里云发送短信

官方代码如下: // This file is auto-generated, dont edit it. Thanks. package com.aliyun.sample;import com.aliyun.tea.*;public class Sample {/*** 使用AK&SK初始化账号Client* param accessKeyId* param accessKeySecret* return Client* throws Excep…...

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…...

hadoop在本地创建文件,然后将文件拷贝/上传到HDFS

1.要$cd {对应目录}进入到对应目录&#xff0c;一般为 cd /usr/local/hadoop/ 2.创建文件&#xff0c;$sudo gedit {文件名}&#xff0c;例 sudo gedit test.txt 然后在弹出的txt文件输入内容&#xff0c;点击右上角的保存之后&#xff0c;关闭即可。 3.拷贝本地文件到HDF…...

NFC:应用场景广泛的短距离通信技术

NFC&#xff1a;应用场景广泛的短距离通信技术 一、NFC 技术介绍1.1 NFC 技术应用场景1.2 NFC 技术优点1.3 NFC 工作原理 二、NFC 开发2.1 NFC 应用开发流程2.2 NFC 读取和写入2.3 NFC 读写功能示例 三、总结 一、NFC 技术介绍 NFC &#xff08;Near-field communication&…...

CentOS使用docker安装OpenGauss数据库

1.搜索OpenGauss docker search opengauss 2.选择其中一个源拉取 docker pull docker.io/enmotech/opengauss 3.运行OpenGauss docker run --name opengauss --privilegedtrue --restartalways -d -e GS_USERNAMEpostgres -e GS_PASSWORDmyGauss2023 -p 5432:5432 docker.…...

原理Redis-QuickList

QuickList **问题1&#xff1a;**ZipList虽然节省内存&#xff0c;但申请内存必须是连续空间&#xff0c;如果内存占用较多&#xff0c;申请内存效率很低。怎么办&#xff1f; 为了缓解这个问题&#xff0c;我们必须限制ZipList的长度和entry大小。 **问题2&#xff1a;**但是…...

js双击修改元素内容并提交到后端封装实现

前面发过一个版本了&#xff0c;后来又追加了些功能。重新发一版。新版支持select和radio。 效果图&#xff1a; 右上角带有绿标的&#xff0c;是可以修改的单元格。如果不喜欢显示绿标&#xff0c;可以传递参数时指定不显示&#xff0c;如果想改为其它颜色&#xff0c;也可以…...

Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署

KubernetesGitlabJenkinsArgoCD多集群部署 文章目录 KubernetesGitlabJenkinsArgoCD多集群部署1. KubernetesGitlabJenkinsArgoCD多集群部署2. 添加WebHooks自动触发3. Jenkins-构建-执行Shell4. 制作镜像及修改Yaml文件4.1 Dockerfile4.2 Build-Shell 5.自动部署Demo测试5.1 推…...

在中国企业出海的大浪潮下,亚马逊云科技提供遍及全球的基础设施和技术支持

中国技术出海是中国企业更高层次更高质量的全球化。在人类文明发展史上&#xff0c;凝聚中国古人智慧结晶的造纸术、印刷术、火药、指南针等&#xff0c;曾为中国技术出海写下过浓墨重彩的一笔。在今天&#xff0c;如金山办公、店匠科技、ADVANCE.AI等公司又以技术立业&#xf…...

前端如何判空

这样判空就会报错 loadNode(node, resolve)console.log("node")console.log(node)if (node.data ! null) {this.get(ctx /publicity/publicityType/typeTreeData?id node.data.id).then((res) > {resolve(res)})}}, 需要这样写&#xff0c;用typeof来做类型判…...

基于SSM的焦作旅游协会管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

庖丁解牛:NIO核心概念与机制详解 07 _ 字符集

文章目录 Pre概述编码/解码处理文本的正确方式示例程序Code Pre 庖丁解牛&#xff1a;NIO核心概念与机制详解 01 庖丁解牛&#xff1a;NIO核心概念与机制详解 02 _ 缓冲区的细节实现 庖丁解牛&#xff1a;NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片 庖丁解牛&…...

ansible的基本安装

目录 一、简介 1.ansible自动化运维人工运维时代 2.自动化运维时代 3.ansible介绍 4.ansible特点 二、ansible实践 1.环境 2.ansible管理安装 3.ansible被管理安装 4.管理方式 5.添加被管理机器的ip 6.ssh密码认证方式管理 三、配置免密登录 1.ansible自带的密码…...

开发仿抖音APP遇到的问题和解决方案

uni-app如何引入阿里矢量库图标/uniapp 中引入 iconfont 文件报错文件查找失败 uni-app如何引入阿里矢量库图标 - 知乎 uniapp 中引入 iconfont 文件报错文件查找失败&#xff1a;‘./iconfont.woff?t1673007495384‘ at App.vue:6_宝马金鞍901的博客-CSDN博客 将课件中的cs…...

手机上玩.NET的两种方式

少见&#xff01;手机上玩 .NET_哔哩哔哩_bilibili 小米平板敲代码&#xff0c;termux安装dotnet和vscode_哔哩哔哩_bilibili 都是先容器加载linux rootfs&#xff0c;然后安装 linux-arm64 版本的 dotnet 命令行方式运行 dotnet&#xff0c;代码编辑到是可以安装使用 vscode…...

从实战出发:用BurpSuite和PHPStudy复现upload-labs靶场19关的5种典型绕过姿势

从实战出发&#xff1a;用BurpSuite和PHPStudy复现upload-labs靶场19关的5种典型绕过姿势 在渗透测试的学习过程中&#xff0c;文件上传漏洞一直是Web安全领域的重要课题。upload-labs靶场作为专门针对上传漏洞设计的实战环境&#xff0c;包含了19种不同类型的上传绕过场景。本…...

别再只盯着特征重要性了!用PDPbox实战解读心脏病预测模型:年龄和血管堵塞如何影响患病风险?

超越特征重要性&#xff1a;用PDPbox解码心脏病预测模型中的关键风险因素 在医疗风险预测领域&#xff0c;我们常常陷入一个思维陷阱&#xff1a;过度依赖特征重要性排序。当模型告诉我们"年龄"是预测心脏病最重要的特征时&#xff0c;我们是否真正理解了65岁与75岁…...

【2026年最新600套毕设项目分享】答题小程序(30212)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...

微信小程序登录背后的安全门道:从auth.code2Session到你的用户体系,这几点千万别做错

微信小程序登录安全架构深度解析&#xff1a;从code2Session到企业级防护体系 当你点击微信小程序那个"授权登录"按钮时&#xff0c;背后其实正在上演一场精密的数字安全芭蕾。作为开发者&#xff0c;我们不仅要让舞步流畅&#xff0c;更要确保每个旋转跳跃都在安全…...

AEUX终极指南:如何用5个步骤彻底告别动效设计中的重复劳动

AEUX终极指南&#xff1a;如何用5个步骤彻底告别动效设计中的重复劳动 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 你是否曾经花费数小时在Figma或Sketch中精心设计了完美的界面&…...

Win11Debloat终极指南:如何让Windows 11系统轻盈如飞

Win11Debloat终极指南&#xff1a;如何让Windows 11系统轻盈如飞 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cus…...

QMCDecode终极指南:3步解锁QQ音乐加密文件,实现音乐播放自由

QMCDecode终极指南&#xff1a;3步解锁QQ音乐加密文件&#xff0c;实现音乐播放自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录…...

中小工厂数字化转型踩坑记:我们是如何从Excel一步步上PLM、ERP和MES的

中小工厂数字化转型踩坑记&#xff1a;从Excel到PLM、ERP和MES的实战路径 三年前&#xff0c;当我们这家200人规模的机械加工厂还在用Excel表格管理订单、用U盘传递图纸时&#xff0c;我从未想过数字化改造会如此艰难又如此必要。作为厂长&#xff0c;我经历了从"表格高手…...

【C语言存算一体芯片开发必修课】:5个真实指令调用示例,覆盖卷积加速、内存映射与低功耗唤醒场景

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C语言存算一体芯片开发概览与指令集架构基础 存算一体&#xff08;Processing-in-Memory, PIM&#xff09;芯片通过将计算单元嵌入存储阵列&#xff0c;显著降低数据搬运开销&#xff0c;成为突破“内存…...

对比使用 Taotoken 前后在多模型管理与账单整合上的效率提升

对比使用 Taotoken 前后在多模型管理与账单整合上的效率提升 1. 多模型接入的复杂度变化 在对接多个大模型厂商时&#xff0c;开发者通常需要为每个供应商单独申请 API Key&#xff0c;并维护不同的接入端点。以常见的 OpenAI 和 Anthropic 兼容模型为例&#xff0c;传统方式…...