数据结构--深入数组
Posted LinkinPark8林肯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--深入数组相关的知识,希望对你有一定的参考价值。
数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的,这篇博客将深入介绍数组在内存中的运行机制。
内存中的数组
数组引用变量只是一个引用,这个引用变量可是指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。
实际的数组对象被存储在堆内存中,如果引用该数组对象的数组变量是一个局部变量,那么它被存储在栈内存中。如下图所示:
如果堆内存中数组不在有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制回收。
为了让垃圾回收机制回收一个数组所占的内存空间,可以将该数组变量赋为null,也就切断了数组引用变量和实际数组之间的引用关系,实际的数组也就成了垃圾。
从内存的角度,看待一个数组,一定要把数组看成两个部分:
1),一部分是数组引用,也就是在代码中定义的数组引用变量
2),一部分是实际的数组对象,这部分在堆内存里运行,通常无法直接访问,只能通过数组引用变量来访问
基本类型数组的初始化
对于基本类型数组而言,数组元素的值直接存储在对于的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后将数组元素的值存入对应数组元素中。
public static void main(String[] args)
// 对应下图4.5
int[] iArr;
// 对应下图4.6
iArr = new int[5];
// 对应下图4.7
for (int i = 0; i < iArr.length; i++)
iArr[i] = i + 10;
引用类型数组的初始化
引用类型数组的数组元素是引用,所以情况稍微有点复杂。每个数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了有效数据。
/**
* 引用类型数组的初始化
*
* @author LinkinPark
*/
public class ReferenceArray
public static void main(String[] args)
// 对应下图4.8
Person[] students;
// 对应下图4.9
students = new Person[2];
// 对应下图4.10
Person zhang = new Person(15, 185);
Person lee = new Person(16, 161);
// 对应下图4.11
students[0] = zhang;
students[1] = lee;
class Person
public int age;
public double height;
public Person(int age, double height)
super();
this.age = age;
this.height = height;
没有多维数组
Java语言里提供了支持多维数组的语法,但是从数组底层的运行机制来看,没有多维数组。
多维数组同样是一维数组,只是其数组元素也是引用,数组元素里保存的引用指向了另外一个一维数组。如下如所示:
以上是关于数据结构--深入数组的主要内容,如果未能解决你的问题,请参考以下文章