数组结构的超简单介绍
有限个相同类型的变量组成的有序集合叫做数组,其中数组的下标是从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(); } }