基础数据结构-数组

120 阅读2分钟

1、数组

  数组是有序的元素序列,若将有限个类型相同的变量的集合命名,那么这个名称为数组名,组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

2、特点

  1. 数组是相同数据类型的元素的集合。
  2. 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
  3. 数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如:a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。

3、表现形式

  1. 一维数组
Int a[], String a[]
  1. 多维数组
Int a[][],Int a[][][],Int a[m][n]

内存空间:m * n

4、特性

  数组是连续的内存空间和相同类型的数据,所以它有了一个非常重要的特性:随机访问。但是也导致了数组的很多操作变得非常低效,比如删除和插入数据,为了保证连续性,就需要做大量的数据搬移工作。

//size 数组的内存
//index 当前已存数据的大小
public void insert(int loc, int n) {
    if(index++ < size) {
        for(int i = size - 1; i > loc; i--) {
            data[i] = data [i - 1]; //把数据往后移一个
        }
        data[loc] = n;
    }
}

public void delete(int loc) {
    for(int i = loc; i < size; i++) {
        if(i != size - 1) {
            data[i] = data[i + 1];
        } else {
            data[i] = -1;
        }
    }
    index--;
}

ArrayList和数组

本质上是一样的,都是数组,但是ArrayList是JDK封装好了的,不需要管扩容等操作,但是普通的数组中的所有操作都需要自己来操作。

两者如何选用呢?

  • 不知道数据大小的选ArrayList。
  • 知道数据的大小而且又非常关注性能那就用数组。 注:数组最需要主义的就是越界,所以一定要多加判断,尤其是在开始和结束。

堆栈内存

Java分为堆栈两种内存。

  • 什么是堆内存:存放new创建的对象和数组
  • 什么是栈内存:引用变量

堆栈的区别

  1. 栈的速度要快。
  2. 栈内存的数据可以共享,主要存一些基本数据类型。

为什么很多计算机编程语言中数组的下标要从0开始?

  定义一个数组一定会分配内存空间,如果从1开始编号,每次随机访问数组元素都多一次减法运算,对于CPU来说,就是多一次减法指令。