我是靠谱客的博主 体贴银耳汤,这篇文章主要介绍给数组(array)插入元素、删除元素1 数组增加元素2 数组中删除元素3 与链表的对比,现在分享给大家,希望可以做个参考。

array

  • 1 数组增加元素
  • 2 数组中删除元素
  • 3 与链表的对比

1 数组增加元素

一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度

数组增加元素的思路:

  1. 建一个新的数组,数组长度为原数组的长度加一。
  2. 将需要增加的元素值赋给数组的最后一个元素。
  3. 将新的数组赋给原来的数组

那么能否在数组某一下标增加元素呢
假设在已知数组中在指定位置添加一个元素,那么在这位置的数据元素就会被替换掉。

复制代码
1
2
3
4
5
6
7
8
9
10
public class InsertArray { public static void main(String[] args) { int index = 2; int value = 5; int[] array = new int[]{1,2,3,4}; array[index] = value; System.out.println(Arrays.toString(array)); } }

在这里插入图片描述
要想解决上面的问题,那只能:

  1. 创建一个新数组,新数组长度 = 旧数组长度 + 1
  2. 在把旧数组里面的元素复制到新元素里面
  3. 根据指定位置之后的数组元素往后移一位
  4. 把指定的元素插进去
  5. 再把新数组赋给旧数组
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class InsertArray { public static void main(String[] args) { int index = 2; int value = 5; int[] array = new int[]{1,2,3,4}; int[] newArray = new int[array.length + 1];// 创建新数组 for (int i = 0; i < array.length; i++) { newArray[i] = array[i]; } for (int i = newArray.length - 1; i > index; i--) { newArray[i] = newArray[i - 1]; } newArray[index] = value; array = newArray;// 把新数组赋给旧数组 System.out.println(Arrays.toString(array)); } }

在这里插入图片描述

复制代码
1
2
https://blog.csdn.net/demo_gsl/article/details/81060206

或者使用集合ArrayList

复制代码
1
2
https://blog.csdn.net/qq_33958946/article/details/82710172

2 数组中删除元素

数组的元素是不能删的,只能覆盖。
例如删除下标为3的元素,需要对下标为3的元素后面的所有元素都要做移动操作,如图所示:
在这里插入图片描述
思路:

  1. 创建一个新数组,数组长度为原来数组的长度减一
  2. 定义需要删除的元素下标
  3. 将删除下标之前的元素赋给新数组的下标值,删除下标之后的元素赋给新数组下标值-1
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package test; import java.util.Arrays; public class TestOpArray { public static void main(String[] args) { //解决数组删除元素的问题 //目标数组 int[] arr = new int[] {9,8,7,6,5,4}; System.out.println(Arrays.toString(arr)); //要删除元素的下标 int dst=3; //创建一个新的数组,长度是原数组-1 int[] newarr = new int[arr.length-1]; //复制原数组中除了要删除的那个元素以外的其他元素 for (int i = 0; i < newarr.length; i++) { //要删除之前的元素 if(i<dst) { newarr[i] = arr[i]; //要删除之后的元素 }else { newarr[i]=arr[i+1]; } } //新数组替换旧数组 arr = newarr; System.out.println(Arrays.toString(arr)); } }

在这里插入图片描述

复制代码
1
2
https://www.cnblogs.com/yitianyitian/p/12456548.html

3 与链表的对比

  1. 数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的(链表是通过指针域的指针链接在内存中各个节点);
    如图所示:
    链表3
    这个链表起始节点为2, 终止节点为7, 各个节点分布在内存个不同地址空间上,通过指针串联在一起。
  2. 性能在这里插入图片描述
    数组的插入/删除操作的时间复杂度为O(n):数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。如往数组插入元素操作,需要定义新数组,把旧数组的元素所要增加的元素复制到新数组,这样每个元素都被操作过至少1次,n个元素则至少被操作了n次,故时间复杂度为O(n)。

数组的查询操作时间复杂度为O(1):直接根据下标定位到数组相应元素即可查询到对应元素,不需要从数组第1个下标(第1个元素)开始遍历。

链表的插入/删除操作的时间复杂度为O(1):链表的长度可以是不固定的,并且可以动态增删。如删除D节点:
在这里插入图片描述
只要将C节点的next指针指向E节点就可以了。这样删除某个节点,只需对该节点前后的节点进行操作,故时间复杂度为O(2),即为O(1)。

链表的查询操作的时间复杂度:
如要查询下图第五个节点(节点E),需要从头节点(节点A)查找,即所查询元素的前面所有元素都要进行查询操作,故链表查找操作的时间复杂度是 O ( n ) O(n) O(n)
在这里插入图片描述

最后

以上就是体贴银耳汤最近收集整理的关于给数组(array)插入元素、删除元素1 数组增加元素2 数组中删除元素3 与链表的对比的全部内容,更多相关给数组(array)插入元素、删除元素1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部