数组结构的超简单介绍
有限个相同类型的变量组成的有序集合叫做数组,其中数组的下标是从0开始的
在存储方式上,会创建连续的内存空间存放一组类型相同的数据
从0开始是计算效率考虑
下面定义一个数组
int[] attr =new int[]{0,1,2,3,4};
当从0开始,attr[k]=attr[0]+k*attr.length;
当从1开始,attr[k]=attr[0]+(k-1)*attr.length;
当计算的数据很大时,计算效率会降低
同时因为是连续的内存空间,所以根据下标可以很快找到需要的数据,这就是ArrayList查询很快的原因
还有一个问题,说数组的增删很慢,以前八股文听得很多,具体啥原因也不知道,这次做个了解,

当我们删除2后,5补上2的位置,4补上5的位置,9补上4的位置,8补上9的位置,这样计算下来时间消耗比查询时间多很多

因为数组总是占用连续的内存空间,所以当数组中有数据删除时,总要补充空缺的位置
代码部分
package com.java.array;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch;
/**
* @Description:
* @Author: Yourheart
* @Create: 2023/2/3 14:05
*/
@Slf4j
public class ArrayTest {
int[] nums = new int[24];
public ArrayTest() {
nums[0] = 3;
nums[1] = 1;
nums[2] = 2;
nums[3] = 5;
nums[4] = 4;
nums[5] = 9;
nums[6] = 8;
}
public void deleteMiddle(int p) {
for (int i = p; i < nums.length; i++) {
nums[i - 1] = nums[i];
}
}
public void display() {
for (int n : nums) {
System.out.println(n);
}
}
public static void main(String[] args) {
ArrayTest demo1 = new ArrayTest();
StopWatch started = StopWatch.createStarted();
demo1.deleteMiddle(3);
log.info("耗时:{}",started.toString());
demo1.display();
}
}
浙公网安备 33010602011771号