数组结构的超简单介绍

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

}

  

 

posted @ 2023-02-05 19:58  不忘初心2021  阅读(30)  评论(0编辑  收藏  举报