array
- 1 数组增加元素
- 2 数组中删除元素
- 3 与链表的对比
1 数组增加元素
一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。
数组增加元素的思路:
- 建一个新的数组,数组长度为原数组的长度加一。
- 将需要增加的元素值赋给数组的最后一个元素。
- 将新的数组赋给原来的数组
那么能否在数组某一下标增加元素呢?
假设在已知数组中在指定位置添加一个元素,那么在这位置的数据元素就会被替换掉。
复制代码
1
2
3
4
5
6
7
8
9
10public 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
6
7
8
9
10
11
12
13
14
15
16
17
18public 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
2https://blog.csdn.net/demo_gsl/article/details/81060206
或者使用集合ArrayList
:
复制代码
1
2https://blog.csdn.net/qq_33958946/article/details/82710172
2 数组中删除元素
数组的元素是不能删的,只能覆盖。
例如删除下标为3的元素,需要对下标为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
28package 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
2https://www.cnblogs.com/yitianyitian/p/12456548.html
3 与链表的对比
- 数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的(链表是通过指针域的指针链接在内存中各个节点);
如图所示:
这个链表起始节点为2, 终止节点为7, 各个节点分布在内存个不同地址空间上,通过指针串联在一起。 - 性能
数组的插入/删除操作的时间复杂度为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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复