我是靠谱客的博主 体贴银耳汤,最近开发中收集的这篇文章主要介绍给数组(array)插入元素、删除元素1 数组增加元素2 数组中删除元素3 与链表的对比,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
array
- 1 数组增加元素
- 2 数组中删除元素
- 3 与链表的对比
1 数组增加元素
一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。
数组增加元素的思路:
- 建一个新的数组,数组长度为原数组的长度加一。
- 将需要增加的元素值赋给数组的最后一个元素。
- 将新的数组赋给原来的数组
那么能否在数组某一下标增加元素呢?
假设在已知数组中在指定位置添加一个元素,那么在这位置的数据元素就会被替换掉。
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
- 在把旧数组里面的元素复制到新元素里面
- 根据指定位置之后的数组元素往后移一位
- 把指定的元素插进去
- 再把新数组赋给旧数组
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));
}
}
https://blog.csdn.net/demo_gsl/article/details/81060206
或者使用集合ArrayList
:
https://blog.csdn.net/qq_33958946/article/details/82710172
2 数组中删除元素
数组的元素是不能删的,只能覆盖。
例如删除下标为3的元素,需要对下标为3的元素后面的所有元素都要做移动操作,如图所示:
思路:
- 创建一个新数组,数组长度为原来数组的长度减一
- 定义需要删除的元素下标
- 将删除下标之前的元素赋给新数组的下标值,删除下标之后的元素赋给新数组下标值-1
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));
}
}
https://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 数组增加元素2 数组中删除元素3 与链表的对比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复