【java】以<内存图>的形式理解数组的增删

数组

        数组在内存里地址连续

        定义一个数组,数组中的数据类型一样(二进制串位数相同),故可以直接通过下标获取数组中的内容。

        基本类型存的是值,引用类型存的是地址

        数组的下标从0开始。

  初始值:

  •         Int :0
  •         char : 空
  •         布尔类型:false
  •          浮点类型0.0
  •         引用类型的数据:null

创建数组

三种创建数组的方式

//创建数组int[] arr = {5,20,55};int[] brr = new int[5];int[] crr = new int[] {20,70,66};

数组输出 

System.out.println(arr);

$ 结果:

        打印的是数组的地址。

$ 原因:

        object里的tostring方法就是这个:

        int的一个类

 $ 想要输出数组值:

for(int i=0;i<arr.length;i++) {System.out.println(arr[i]);}

java自己提供了方法打印

System.out.println(Arrays.toString(arr));

可变数组

        数组的长度不可变,最初定义数组的时候就说明了数组的长度

        java实现了可变数组

        java提供了一些集合:

        List集合(接口),当中有一个实现类ArrayList。

        只需要new这个实现类,就可以

ArrayList:

        ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

        ArrayList 继承了 AbstractList ,并实现了 List 接口。

        ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.ArrayList; // 引入 ArrayList 类ArrayList<E> objectName =new ArrayList<>();  // 初始化
  • E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型
  • objectName: 对象名。

本文作者自写了一个ArrayList,没有引用。 

数组扩容:定义一个新的更长的数组(有默认值) 大约是原数组的1.5倍

原数组数据复制过去

arr指向新的数组


插入,添加


最后一个位置添加

因为数组当中是有默认值的,不知道是有效的还是无效的。

故要设一个size记录有效位。

  package com.lojarro.数组;public class ArrayList {//全局变量int size=0;//记录有效数据的个数int capacity=10;//数组容量double factor=1.5;//因数1.5int[] arr=new int[capacity];/*//构造方法public ArrayList() {size=0;capacity=10;factor=1.5;arr= new int[capacity];}*///最后一个位置插入public void add(int element) {//判断数组满没满if(size==capacity) {//数组满了,需要扩容capacity=(int)(capacity*factor);//capacity*factor可能是整数,也可能是小数int[] brr=new int[capacity];for(int i=0;i<arr.length;i++) {brr[i]=arr[i];//把原数组数据放到新数组当中}arr=brr;}//插入数据arr[size]=element;size++;}//打印public String toString() {//返回字符串return object.toString(); }}
public static void main(String[] args) {ArrayList list=new ArrayList();list.add(1);list.add(2);list.add(3);list.add(4);list.add(7);list.add(1);list.add(2);list.add(3);list.add(4);list.add(7);list.add(1);list.add(2);list.add(3);list.add(4);list.add(7);System.out.println(list);

toString() 返回

用户只想看到前面有效的

        把有效的数据遍历好,封装一个toString()

String res="[";for(int i=0;i<size;i++) {if(i==size-1) {res+=arr[i];}elseres+=arr[i]+", ";}res+="]";return res;


指定位置插入

//指定位置插入public void insert(int value,int position) {//判断位置是否合理if(position<0||position>size) {System.out.println("插入位置不合理");return ; }//判断数组满没满if(size==capacity) {//数组满了,需要扩容capacity=(int)(capacity*factor);int[] brr=new int[capacity];for(int i=0;i<arr.length;i++) {brr[i]=arr[i];}arr=brr;}//数组有空间进行插入//插入位置及其之后的数据,从后往前的顺序统一向后移动一位for(int i=size-1;i>=position;i--) {arr[i+1]=arr[i];}//插入arr[position]=value;size++;}
public class Test2 {public static void main(String[] args) {ArrayList list=new ArrayList();list.add(1);list.add(2);list.add(3);list.add(4);list.add(7);list.add(1);list.add(2);list.add(3);list.add(4);list.add(7);list.add(1);list.insert(100, 5);System.out.println(list);}
}

 


有序数组的插入

 

//插入有序数组public void insOrder(int value) {//查找第一个比他大的//中间位置或者第一个位置for(int j=0;j<size;j++) {if(arr[j]>value) {//挪位置for(int i=size-1;i>=j;i--) {arr[i+1]=arr[i];}//插入arr[j]=value;size++;return ;}}//没找到比他大的arr[size]=value;size++;}


删除

指定数据删除


删除第一个符合条件的数据

 

//删除第一个符合条件的数据public boolean delFirst(int value) {//查找元素for(int j=0;j<size;j++) {if(arr[j]==value) {//删除for(int i=j+1;i<size;i++) {arr[i-1]=arr[i];}size--;return true;}}return false;}

 


删除所有符合条件的数据

//删除所有public void delete(int value) {//查找元素for(int j=size-1;j>=0;j--) {if(arr[j]==value) {//删除for(int i=j+1;i<size;i++) {arr[i-1]=arr[i];}size--;}}}

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

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

相关文章

时代变了!Megabit兆比特英伟达纳入道琼斯指数,英特尔被取代

△英特尔VS英伟达市值对比(截至今年2月) 最新消息,英伟达将在2024年11月8日替代英特尔成为道琼斯工业平均指数的组成成员。 Megabit兆比特自成立以来,Megabit凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 这是历史最悠久的美…

算法竞赛(Python)-大事化小,小事化了(分治)

文章目录 前言一、数乘型分治1 疯狂的细胞分裂 二 矩阵乘法的分治1 神秘数字 三 、线性结构问题的分治1 自助餐厅&#xff08;1&#xff09;2 自助餐厅&#xff08;2&#xff09; 四 、树形结构的分治1 二叉树的最大深度 前言 分治思想&#xff1a;将一个大问题分词几个小问题&…

使用Jupyter Notebook进行数据科学项目

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Jupyter Notebook进行数据科学项目 Jupyter Notebook 简介 安装 Jupyter Notebook 创建和管理 Notebook 编写和运行代码 示例…

21、基于AT89C52的电子密码锁proteus仿真设计

一、仿真原理图: 二、仿真效果: 三、相关代码: 1、定时中断: void Time0(void ) interrupt 1 using 1 { count++; if(count == 50) { count = 0; buffer = keyScan(); if(buffer < 16) { value[index++…

【HarmonyOS】鸿蒙应用设置控件通用样式AttributeModifier, @Styles

【HarmonyOS】鸿蒙应用设置控件通用样式AttributeModifier&#xff0c; Styles 前言 在鸿蒙中UI开发经常需要对控件样式进行统一的封装&#xff0c;在API早前版本&#xff0c;一般是通过 Styles进行样式封装复用&#xff1a; Entry Component struct Index {build() {Column(…

【MySQL】可重复读级别下基于Next Key Lock解决幻读

昨天读到了一篇文章[1]&#xff0c;里面讲&#xff0c;面试官说mysql的可重复读级别下有解决幻读的方式&#xff0c;最后公布了答案&#xff0c;是在sql后面加for update。这么说倒是没错&#xff0c;但是这种问法给我一种奇怪的感觉&#xff0c;因为for update无论在哪个隔离级…

Mybatis学习笔记(三)

十、MyBatis的逆向工程 (一)逆向工程介绍 MyBatis的一个主要的特点就是需要程序员自己编写sql&#xff0c;那么如果表太多的话&#xff0c;难免会很麻烦&#xff0c;所以mybatis官方提供了一个逆向工程&#xff0c;可以针对单表自动生成mybatis执行所需要的代码&#xff08;包…

dns构建

&#xff08;1&#xff09;用户输入域名发起域名查询请求。 &#xff08;2&#xff09;计算机操作系统先查找本地hosts文件中是否有这个域名与IP的对应关系&#xff0c;有就返回结果给用户&#xff0c;没有就进入下一步。 &#xff08;3&#xff09;hosts文件找那个没有此域名…

<项目代码>YOLOv8 pcb板缺陷检测<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式

FET113i-S核心板是飞凌嵌入式基于全志T113-i处理器设计的国产工业级核心板&#xff0c;凭借卓越的稳定性和超高性价比&#xff0c;FET113i-S核心板得到了客户朋友们的广泛关注。作为一款拥有A7核RISC-V核DSP核的多核异构架构芯片&#xff0c;全志科技于近期释放了T113-i的RISC-…

打印速度与精度难兼顾,动态界面打印能否破解?

大家好&#xff01;在科技飞速发展的今天&#xff0c;3D 打印技术已深入众多领域。然而&#xff0c;传统打印技术面临着速度、材料、精度等诸多挑战。在此背景下&#xff0c;一种名为动态界面打印&#xff08;DIP&#xff09;的新技术应运而生——《Dynamic interface printing…

IMS 注册慢问题分析

1、问题描述 VOLTE长时间没注册上。 2、Log分析 10-04 15:49:04.745089 2118 3531 D ImsService: enableIms, phoneId 1 10-04 15:49:04.757739 1423 1498 D RmcImsCtlReqHdl: [1] requestSetImsCfg volte:1, vilte:1, vowifi:0, viwifi:0, sms:1, imsTe…

【网络】套接字编程——TCP通信

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;TCP网络服务器简单模拟实现。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;…

Django Form 实现多层(嵌套)模型表单

在 Django 中&#xff0c;可以通过使用 ModelForm 和 InlineFormSet 来实现多层&#xff08;嵌套&#xff09;模型表单。这样可以在一个表单中同时编辑主模型及其相关的子模型。下面是一个示例&#xff0c;演示如何实现这种多层嵌套的表单。 1、问题背景 如何使用 Django 的 F…

Linux - grep的正则用法

新建u.txt&#xff0c;文本内容如图&#xff1a; 搜寻特定字符串 利用中括号[]搜寻集合字符 行首与行位字符^$ 任意一个字符.与重复字符*限定连续RE字符范围{} 总结:

落地灯选什么光源最好?五款值得入手的大路灯护眼灯推荐

落地灯选什么光源最好&#xff1f;落地灯是既适合日常人群使用&#xff0c;又适合长时间用眼的学生党、码字党使用的一种照明神器&#xff0c;因此热度一直都很高。但是该行业内的产品也很复杂&#xff0c;其中还有一些劣质不专业的产品掺杂在其中&#xff0c;不但灯光效果不明…

如何获取免费的纯真社区版IP库授权?

纯真社区版IP库 1、访问官网 https://cz88.net/geo-public 地址注册账号 2、登录账号后&#xff0c;申请api 授权

【AAOS】【源码分析】CarSystemUI -- CarSystemBar

CarSystemBar不像Android手机那样固定的顶部“状态栏”和底部“导航栏”,而是将StatusBar和NavigationBar都统称为SystemBar,可以通过如下配置为每侧最多配置一个“系统栏”。 packages/apps/Car/SystemUI/res/values/config.xml<!-- Configure which system bars should …

【DBeaver】连接带kerberos的hive[Apache|HDP]

目录 一、安装配置Kerberos客户端环境 1.1 安装Kerberos客户端 1.2 环境配置 二、基于Cloudera驱动创建连接 三、基于Hive原生驱动创建连接 一、安装配置Kerberos客户端环境 1.1 安装Kerberos客户端 在Kerberos官网下载,地址如下&#xff1a;https://web.mit.edu/kerberos…

1.探索WebSocket:实时网络的心跳!

序言 你可能听说过"WebSokcet"这个词&#xff0c;感觉它好像很高深&#xff0c;但其实它是一个超级酷的小工具&#xff0c;让我们在Web应用里实现实时通信。想象一下&#xff0c;你可以像聊天一样&#xff0c;在浏览器和服务器之间来回“畅聊“&#xff0c;没有延迟…