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;
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

我在CSDN的2023年

一、引言 在2023年的这一年当中&#xff0c;在CSDN的生活让我得到许多知识与启发&#xff0c;也让我获得一些快乐和成就 二、自己的收获 在这一年当中&#xff0c;我从一个只会看别人写的文章解决问题到&#xff0c;可以自己写文章帮别人解决问题&#xff0c;这种成就感是极大…

【数据不完整?用EM算法填补缺失】期望值最大化 EM 算法:睹始知终

期望值最大化算法 EM&#xff1a;睹始知终 算法思想算法推导算法流程E步骤&#xff1a;期望M步骤&#xff1a;最大化陷入局部最优的原因 算法应用高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09;问题描述输入输出Python代码实现 算法思想 期望值最大化方法&a…

手把手教你学会接口自动化框架的搭建-前言

在网上看过很多帖子,各种接口自动化的框架眼花缭乱,但是对于很多才做自动化的新手,那是一头雾水。 因此,我决定出一个系列,让你能够按照我的文档一步步把接口自动化都做起来,而不是网上这种一股脑的全部抛出,让你看的云里雾里的。 看完这些文档保证你能去任何一家公司,…

面对众多知识付费平台,如何做出明智的选择?

在当今的知识付费市场中&#xff0c;用户面临的选择越来越多&#xff0c;如何从众多知识付费平台中正确选择属于自己的平台呢&#xff1f;下面&#xff0c;我们将为您介绍明理信息科技知识付费平台相比同行的优势&#xff0c;帮助您做出明智的选择。 一、创新的技术架构&#…

Python Web框架FastAPI——一个比Flask和Tornada更高性能的API框架

目录 一、FastAPI框架概述 二、FastAPI与Flask和Tornado的性能对比 1、路由性能 2、请求处理性能 3、内存占用 三、FastAPI的优点与特色 四、代码示例 五、注意事项 六、结论 在当今的软件开发领域&#xff0c;快速、高效地构建API成为了许多项目的关键需求。为了满足…

DevEco Studio IP Convention for MAC

一、前置条件 1、已经Phone/Tablet和PC连接到同一WLAN网络。 2、已经获取Phone/Tablet的IP地址&#xff0c;可通过设置>关于手机/关于平板>状态信息>IP地址进行 查看 3、Phone/Tablet上的555…

Nginx多域名部署多站点

目录 1.修改配置文件nginx.conf 2. 修改hosts文件 1.修改配置文件nginx.conf 在配置文件的 server_name 处修改成自己需要的域名&#xff0c;然后保存退出 j 查看语法是否错误&#xff0c;然后重启nginx nginx -t # 查看语法是否正确 systemctl restart nginx # 重启nginx …

【Python机器学习】观察数据散点图矩阵

构建机器学习模型前&#xff0c;通常要检查数据&#xff0c;判断不用机器学习能不能轻松完成任务&#xff0c;或者需要的信息有没有包含在数据中。检查数据也是发现异常值和特殊值的好办法。 检查数据的最佳方法之一就是可视化&#xff0c;一种是绘制散点图&#xff0c;将一个…

CNN——LeNet

1.LeNet概述 LeNet是Yann LeCun于1988年提出的用于手写体数字识别的网络结构&#xff0c;它是最早发布的卷积神经网络之一&#xff0c;可以说LeNet是深度CNN网络的基石。 当时&#xff0c;LeNet取得了与支持向量机&#xff08;support vector machines&#xff09;性能相…

【前沿技术】超级稳定的视频卡通画方案

Git clone项目到本地 git clone gitgithub.com:Artiprocher/DiffSynth-Studio.git 基本原理 使用了stable diffusion稳定扩散模型和controlnet来控制图像生成的轮廓&#xff0c;animatediff控制视频帧与帧之间的连续性&#xff0c;最后使用RIFE技术平滑整个生成后的视频。 …

40道java集合面试题含答案(很全)

1. 什么是集合 集合就是一个放数据的容器&#xff0c;准确的说是放数据对象引用的容器集合类存放的都是对象的引用&#xff0c;而不是对象的本身集合类型主要有3种&#xff1a;set(集&#xff09;、list(列表&#xff09;和map(映射)。 2. 集合的特点 集合的特点主要有如下两…

使用Python做个可视化的“剪刀石头布”小游戏

目录 一、引言 二、环境准备与基础知识 三、游戏界面制作 四、游戏逻辑实现 五、代码示例 六、游戏测试与优化 七、扩展与改进 八、总结 一、引言 “剪刀石头布”是一种古老的手势游戏&#xff0c;它简单易懂&#xff0c;趣味性强&#xff0c;适合各个年龄段的人参与。…

虎克:开发小程序要多少钱一个,非专业开发如何做自己的小程序

小程序开发费用主要取决于小程序的功能复杂度和开发周期。一般来说&#xff0c;小程序开发费用可以分为两类&#xff1a;模板开发和定制开发。 模板开发&#xff1a;模板开发是指使用现成的模板进行开发&#xff0c;价格相对较低&#xff0c;一般在几千元左右。优点是价格便宜&…

你不知道的 CSS 之 包含块 ! 最细讲解,一听就懂!

你不知道的 CSS 之包含块 一说到 CSS 盒模型&#xff0c;这是很多小伙伴耳熟能详的知识&#xff0c;甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别。 但是一说到 CSS 包含块&#xff0c;有的小伙伴就懵圈了&#xff0c;什么是包含块&#xff1f;好像…

(切图笔记)layui表格单元格添加超链接 以及传参方法 亲测可用 附代码

layui在切图网日常的工作中常常用到&#xff0c;特别是它的layer弹窗&#xff0c;基本可以满足网站切图时候遇到的绝大多数弹窗的情况&#xff0c;参数比较丰富 灵活&#xff0c;是不可多得的网页插件之一&#xff0c;我见很多人说layui过时了&#xff0c;这是相比于vue正流行的…

具有不规则结果的常规 PyTorch 张量函数

一、说明 深度学习从业者应注意的常用 PyTorch 张量函数的例外情况。你是不是也和上面的人一样呢&#xff1f;如果是&#xff0c;那么本文可能会帮助您在使用 PyTorch 构建深度学习模型时发现一些常见错误。 我在下面提到了 5 个最常用的 PyTorch 函数及其小示例以及它们无法按…

阿里云服务器8080端口怎么打开?在安全组中设置

阿里云服务器8080端口开放在安全组中放行&#xff0c;Tomcat默认使用8080端口&#xff0c;8080端口也用于www代理服务&#xff0c;阿腾云atengyun.com以8080端口为例来详细说下阿里云服务器8080端口开启教程教程&#xff1a; 阿里云服务器8080端口开启教程 阿里云服务器8080端…

Codeforces Good Bye 2023 A~E

A.2023(思维) 题意&#xff1a; 有一个序列 A a 1 , a 2 , . . . , a n k A a_1, a_2, ..., a_{n k} Aa1​,a2​,...,ank​&#xff0c;且这个序列满足 ∏ i 1 n k a i 2023 \prod\limits_{i 1}^{n k}a_i 2023 i1∏nk​ai​2023&#xff0c;而这个序列中的 k k k个…

[Flutter]WindowsOS上运行遇到的问题总结

[Flutter]WindowsOS上运行遇到的问题总结 写在开头 Flutter项目已能在移动端完美使用后&#xff0c;想看看在桌面端等使用情况 基于Flutter3.0后已支持Windows/MacOS等桌面端&#xff0c;不过具体的系统&#xff0c;还需要看下官方文档解释。 这里抛出文档地址&#xff0c;可…

solidity显示以太坊美元价格

看过以太坊白皮书的都知道&#xff0c;以太坊比较比特币而言所提升的地方中&#xff0c;我认为最重要的一点就是能够访问外部的数据&#xff0c;这一点在赌博、金融领域应用会很广泛&#xff0c;但是区块链是一个确定的系统&#xff0c;包括里面的所有数值包括交易ID等都是确定…