Java基础-----集合类(一)

请添加图片描述

文章目录

  • 1.集合类简介
  • 2. 自定义集合类

1.集合类简介

集合和数组一样,都是用来存储多个数据的结构,也可以称作容器。

数组长度是不可变化的,一旦在初始化数组时指定了数组长度,这个长度就不可变。如果需要处理数量变化的数据,数组就无法实现;而且数组也没有办法保存有映射关系的数据(例如:语文-90分,数学-80分)。

为了保存数量不确定的数据,以及具有映射关系的数据,提供了集合类。

集合类主要负责保存、盛装 其他数据。

所有的集合类都在java.util包下,提供了一个表示和操作对象集合的统一架构,包含了大量的接口和类,并且包含了这些接口和实现类的操作算法和数据结构。

集合和数组处理的区别:

  • 数组的长度不可变,集合类的长度可变
  • 数组提供的方法有限,对于添加、删除、插入数据操作非常不方便,并且效率不高。
  • 数组中存储数据的特点是:有序、可重复的,对于无序、不可重复的需求,不能满足。
  • 数组中可以存储基本数据类型。也可以存储引用类型。在集合中只能保存引用类型(保存的是对象的引用地址)

在集合和数组中所指的存储,指在内存层面的存储,不涉及到持久化数据。(持久化数据指的是永久保存的数据,这种数据一般保存在磁盘上或者数据库中)

数组集合
长度不可变长度可变
提供的方法有限,对于添加、删除、插入数据操作不方便操作数据方便
存储的数据是有序、可重复存储的数据无序、不可重复
可以存储基本数据类型,也可以存储引用类型只能存储引用类型

2. 自定义集合类

public class MyArray {private Object[] elementData;//用来存储数据的数组private int size;//数组的实际长度(实际元素的个数)private static final int DEFAULT_CAPACITY=10;//默认初始空间private static final Object[] EMPTY_ELEMENTDATA={};//构造函数public MyArray(){elementData=new Object[DEFAULT_CAPACITY];}/*** 如果我不需要那么大的空间,可以用下面这个方法* 在创建数组空间时,要先对initialCapacity进行判断* 如果initialCapacity>0,那么就创建大小为initialCapacity新的空间* 如果initialCapacity=0,那么就创建大小为空的新的空间* 如果以上条件都不满足,就抛出参数异常*/public MyArray(int initialcapacity){if (initialcapacity>0){elementData=new Object[initialcapacity];}else if (initialcapacity==0){elementData=EMPTY_ELEMENTDATA;}else {throw new IllegalArgumentException("数组初始参数异常"+initialcapacity);}}//获取集合的实际大小public int size(){return size;}//向集合中添加数据public boolean add(Object obj){add(obj,elementData,size);return true;}//在索引位置插入数据public void add(int index,Object obj){if (index>size || index<0){throw new IndexOutOfBoundsException("索引下标越界:"+index);}if (size==elementData.length){elementData=grow();}System.arraycopy(elementData,index,elementData,index+1,size-index);elementData[index]=obj;size++;}/*** 添加元素类* @param obj           要添加的元素* @param elementData   数组* @param s             数组的现有长度*/public void add(Object obj,Object[] elementData,int s){if (s==elementData.length){elementData=grow();}elementData[s]=obj;size=s+1;}//扩容public Object[] grow(){return elementData= Arrays.copyOf(elementData,elementData.length+(elementData.length>>1));}//获取元素public Object get(int index){if (index<elementData.length){return elementData[index];}else {throw new IndexOutOfBoundsException("索引长度异常");}}//清除集合中的所有元素public void clear(){/*int to=size;size=0;for (int i=0;i<size;i++){elementData[i]=null;}*/for (int to=size, i=size=0;i<to;i++){elementData[i]=null;}}//删除索引位置的数据,并返回删除掉的元素值public Object remove(int index){if (index>size || index<0){throw new IndexOutOfBoundsException("索引下标越界:"+index);}Object obj=elementData[index];size--;if (size>index){System.arraycopy(elementData,index+1,elementData,index,size-index);}elementData[size]=null;return obj;}}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 混合开发 - 动态下发 libflutter.so libapp.so

背景 最近在做包体积优化&#xff0c;在完成代码混淆、压缩&#xff0c;裁剪ndk支持架构&#xff0c;以及资源压缩&#xff08;如图片转webp、mp3压缩等&#xff09;后发现安装包的中占比较大的仍是 so 动态库依赖。 具体查看发现 libflutter.so 和 libapp.so 的体积是最大的&…

探索Java的魅力

从本篇文章开始&#xff0c;小编准备写一个关于java基础学习的系列文章&#xff0c;文章涉及到java语言中的基础组件、实现原理、使用场景、代码案例。看完下面一系列文章&#xff0c;希望能加深你对java的理解。 本篇文章作为本系列的第一篇文章&#xff0c;主要介绍一些java…

【数据库原理】(6)关系数据库的关系操作集合

基本关系操作 关系数据操作的对象都是关系,其操作结果仍为关系,即集合式操作。关系数据库的操作可以分为两大类&#xff1a;数据查询和数据更新。这些操作都是基于数学理论&#xff0c;特别是集合理论。下面是对这些基本操作的解释和如何用不同的关系数据语言来表达这些操作的…

STM32入门教程-2023版【3-2】推挽输出和开漏输出驱动问题

关注 点赞 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 二、正式点亮一个LED灯 &#xff08;4&#xff09;推挽输出和开漏输出驱动问题 把LED的正负极对换&…

react useEffect 内存泄漏

componentWillUnmount() {this.setState (state, callback) > {return;};// 清除reactionthis.reaction();}useEffect 使用AbortController useEffect(() > { let abortController new AbortController(); // your async action is here return () > { abortCo…

008、所有权

所有权可以说是Rust中最为独特的一个功能了。正是所有权概念和相关工具的引入&#xff0c;Rust才能够在没有垃圾回收机制的前提下保障内存安全。 因此&#xff0c;正确地了解所有权概念及其在Rust中的实现方式&#xff0c;对于所有Rust开发者来讲都是十分重要的。在本文中&…

添加 Android App Links

添加 Android App Links功能 介绍一个简单的效果Android配置Add Url intent filtersAdd logic to handle the intentAssociate website 搭建网页支持AppLinks 介绍 Android App Links 是指将用户直接转到 Android 应用内特定内容的 HTTP 网址。Android App Links 可为您的应用带…

计算机网络--作业

作业一 1、比较电路交换、报文交换和分组报文交换优缺点 电路交换 电路交换是以电路连接为目的的交换方式&#xff0c;通信之前要在通信双方之间建立一条被双方独占的物理通道&#xff08;由通信双方之间的交换设备和链路逐段连接而成&#xff09;。 优点&#xff1a; ①由于…

SpringSecurity-2.7中跨域问题

SpringSecurity-2.7中跨域问题 访问测试 起因 写这篇的起因是会了解到 SSM(CrosOrigin)解决跨域,但是会在加入SpringSecurity配置后,这个跨域解决方案就失效了,而/login这个请求上是无法添加这个注解或者通过配置(WebMvcConfig)去解决跨域,所以只能使用SpringSecurity提供的.c…

MySQL的安装网络配置

目录 一. MySQL5.7的安装 二. MySQL8.0的安装 三. 配置网络访问 思维导图 一. MySQL5.7的安装 1. 解压 2. 将my.ini文件放入到解压文件中 3. 编辑my.ini文件&#xff0c;将路径改为当前路径 4. 进到bin目录下&#xff0c;以管理员身份打开cmd命令窗口 5. 安装MySQL服务 my…

C++Qt6 哈夫曼编码求解 数据结构课程设计 | JorbanS

一、 问题描述 在进行程序设计时&#xff0c;通常给每一个字符标记一个单独的代码来表示一组字符&#xff0c;即编码。在进行二进制编码时&#xff0c;假设所有的代码都等长&#xff0c;那么表示 n 个不同的字符需要 位&#xff0c;称为等长编码。如果每个字符的使用频率相等&…

【hyperledger-fabric】部署和安装

简介 对hyperledger-fabric进行安装&#xff0c;话不多说&#xff0c;直接开干。但是需要申明一点&#xff0c;也就是本文章全程是开着加速器进行的资源操作&#xff0c;所以对于没有开加速器的情况可能会由于网络原因导致下载资源失败。 资料提供 1.官方部署文档在此&#…

车载电子电器架构 —— 电子电气系统开发角色定义

车载电子电器架构 —— 电子电气系统开发角色定义 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文12000字,深度思考者进!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的…

Redis7.2.3(Windows版本)

1、解压 &#xfeff; &#xfeff; 2、设置密码 &#xff08;1&#xff09; 右击编辑redis.conf文件&#xff1a; &#xfeff; &#xff08;2&#xff09; 设置密码。 &#xfeff; 3、测试密码是否添加成功 &#xfeff; 如上图所示&#xff0c;即为成功。 4、设置…

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者&#xff1a;贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月&#xff0c;阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品&#xff0c; 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高&#xff0c;稳定性保…

第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器

上节课我们已经拿到了摄像头数据和麦克风数据&#xff0c;这节课我们来看一下如何将二者合并起来推送到rtmp服务器。推送音视频合成流到rtmp服务器地址的流程如下&#xff1a; 1.创建输出流 //初始化输出流上下文 avformat_alloc_output_context2(&outFormatCtx, NULL, &…

dmetl5授权查看与更新

1.查看dmetl5授权到期时间 需要登录管理端&#xff0c;菜单栏选择“管理”-“license管理”即可查看授权到期时间。如下图&#xff1a; 2.dmetl5更新授权的方法 dmetl5的<安装目录>\scheduler\config路径下&#xff0c;默认会有一个trail.key的文件&#xff0c;删除后&am…

Java学习苦旅(十六)——List

本篇博客将详细讲解Java中的List。 文章目录 预备知识——初识泛型泛型的引入泛型小结 预备知识——包装类基本数据类型和包装类直接对应关系装包与拆包 ArrayList简介ArrayList使用ArrayList的构造ArrayList常见操作ArrayList遍历 结尾 预备知识——初识泛型 泛型的引入 我…

八大算法排序@选择排序(C语言版本)

目录 选择排序概念算法思想示例步骤1步骤2步骤...n最后一步 代码实现时间复杂度空间复杂度特性总结 选择排序 概念 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。基本思想是在未排序的序列中找到最小&#xff08;或最大&#xff09;元素&#xf…