数组的增删改查等操作

地址连续

直接通过下标获取数组里的内容:数组的下标从0开始

默认值: int 0 char 空 false 0.0 string null

用 java 写数组(定义、输出):

数组的长度不可变

可变数组 List ArrayList : new ArrayList<>();

数组扩容:

数组长度不够时,重新创建有个比原数组更长的数组brr,把原数组arr当中的数据全部复制到新数组当中

arr指向brr ,arr原来指向的就会被系统回收掉(Java有自动回收机制)

public class Test { public static void main(String[] args) { //创建数组 int[] arr = {5,20,55}; int[] brr = new int[arr.length+1]; for(int i = 0;i<arr.length;i++) { brr[i] = arr[i]; } arr = brr; arr[3] = 50; System.out.println(Arrays.toString(arr)); } }

自建ArrayList

  • ArrayList.java:

package 数组;

public class ArrayList {

//全局变量 int size = 0;//记录有效数据的个数 int capacity = 10;//数组容量 double factor = 1.5;//因数1.5 int[] arr = new int[capacity];

/* int[] arr;

int size;//记录有效数据的个数

int capacity;//数组容量

double factor;//因数1.5

//构造方法 public ArrayList() { size = 0; capacity = 10; factor = 1.5; arr = new int[capacity]; }*/ public void add(int element) { if(size==capacity) { //数组满了,满了扩容 //强制转换成int类型的数据 capacity = (int) (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() { String res = "["; //为了使打印出有效数据,后面一些默认数据0之类的不要 for(int i=0;i<size;i++) { //最后一个数据 if(i==size-1) { res+=arr[i]; } else { res+=arr[i]+","; } } res+="]"; return res; }

}

  • 模拟ArrayList.java:

package 数组;

public class 模拟ArrayList {

public static void main(String[] args) { //new一个对象出来,list是对象 ArrayList list = new ArrayList(); list.add(1); list.add(3); list.add(3); list.add(4); list.add(5); list.add(6); list.add(6); list.add(2); list.add(1); list.add(9); list.add(6); list.add(3); //有自己的toString方法,调用自己的 System.out.println(list.toString()); //所有打印默认调用的都是toString方法(自己的) System.out.println(list); }

}

数组的增删改查

最后位置插入:

插入之前判断数组当中有没有位置:判断size和数组的长度是否相等

  • 不相等则插入,说明有位置

size刚好就是需要插入的位置,有一个数据的话,size=1,插入数据的话应该插入下表为1的位置

arr[size] = num;

size++

  • 相等则满了,需要扩容

指定位置插入:

1、判断插入的位置是否合法【0,size】

2、判断数组当中有没有位置:判断size和数组的长度是否相等,相等则满了,需要扩容

3、eg:在下标为2的位置插入数据

把原数据想要插入的位置及其之后的数据,按照从后往前的顺序 依次向后移动一位

4、数据移动完成之后,原来的数据不怕被覆盖掉,写入数据

size++

有序数组的插入:

1、判断数组当中有没有位置:判断size和数组的长度是否相等,相等则满了,需要扩容

2、记录第一个比目标数值大的数据所在的位置

3、把原数据想要插入的位置及其之后的数据,按照从后往前的顺序 依次向后移动一位

4、数据移动完成之后,原来的数据不怕被覆盖掉,写入数据

size++

删除:

把数据覆盖掉,size-1

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

1、从前往后遍历,找到要删除的元素,记录其所在的位置 position

2、position之后的数据 按照从前往后的数据 依次向前覆盖

size--

3、结束,不再查找

eg:删除100

删除所有符合条件的数据:

1、从后往前遍历,找到要删除的元素,记录其所在的位置 position

2、position之后的数据 按照从前往后的数据 依次向前覆盖

size--

3、继续向前查找,直到遍历完全部的数据

直接拿下标进行修改arr[2]=100

### Java数组增删改查操作 #### 删除数组元素 由于Java中的数组长度固定,在删除元素时通常会将其转换为`ArrayList`,因为后者提供了动态调整大小的功能。下面展示了如何将一个整数类型的数组转化为`ArrayList`并从中移除指定位置处的元素[^1]。 ```java package com.journaldev.java; import java.util.ArrayList; import java.util.Arrays; public class Main { public static void main(String[] args) { int[] arr = new int[]{1, 3, 3, 4, 5}; ArrayList<Integer> arr_new = new ArrayList<>(); // 将原始数组的内容复制到新的列表中 for (int i : arr) { arr_new.add(i); } // 移除索引为3的位置上的元素(即第四个元素) arr_new.remove(Integer.valueOf(3)); System.out.println("Before deletion :" + Arrays.toString(arr)); System.out.println("After Deletion:" + arr_new); } } ``` 注意这里使用了`Integer.valueOf()`方法来封装基本数据类型以便于`remove()`方法能够识别要移除的对象而非索引值。 #### 修改数组元素 对于修改特定索引处的数据而言,可以直接利用下标访问该位置然后赋新值给它。这适用于任何支持随机存取的一维或多维数组结构[^2]。 ```java // 假设有一个已存在的数组arr arr[index] = newValue; // index是要更改的那个元素的位置,newValue则是想要设置的新数值 ``` #### 查询数组元素 查询可以通过遍历整个数组来进行,也可以借助更高效的算法比如二分查找法如果数组已经排序的话。最简单的做法就是循环读取直到找到目标项为止: ```java for(int element : array){ if(element == target){ foundIndex = currentIndex; break; } currentIndex++; } ``` 当然还可以采用增强版for-each语句配合条件判断快速定位所需记录;另外当面对大型有序序列时建议优先考虑二叉树或者哈希表等高级容器以提高检索效率。 #### 向数组添加元素 考虑到原生数组不可变长的特点,实际开发过程中往往会选择先转成`List`接口下的具体实现类再执行追加动作最后视情况决定要不要回退成普通数组形式保存结果。以下是基于上述思路的一个例子说明怎样向现有集合里增加成员[^3]: ```java List<String> stringList = new ArrayList<>(Arrays.asList(originalArray)); stringList.add(newElement); // 这里的newElement是你打算加入的新条目 String[] updatedArray = stringList.toArray(new String[stringList.size()]); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值