数据结构--深入数组

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语言里提供了支持多维数组的语法,但是从数组底层的运行机制来看,没有多维数组

多维数组同样是一维数组,只是其数组元素也是引用,数组元素里保存的引用指向了另外一个一维数组。如下如所示:



以上是关于数据结构--深入数组的主要内容,如果未能解决你的问题,请参考以下文章

数据结构--深入数组

数据结构--深入数组

深入Java数据类型

使用Java语言深入理解程序逻辑——数组

使用Java语言深入理解程序逻辑——数组

使用Java语言深入理解程序逻辑——数组