我对阵列的基本问题很少。
考虑我声明一个整数数组
int intArray[] = new intArray[10];
intArray[0] = 10;
intArray[1] = 20;
// and so on...
intArray
如何存储在内存中(我的意思是数组的元素)?
考虑我声明某种类型的对象数组,比如说Employee
class Employee {
int x = 10;
int y = 20;
Employee(int x, int y) {
this.x = x;
this.y = y;
}
}
class TestEmployee {
public void main(String args[]) {
Employee empArray = new Employee[10];
empArray[0] = new Employee(10, 20);
empArray[1] = new Employee(30, 40);
...
}
}
empArray
在记忆中的样子是什么?
答案 0 :(得分:1)
考虑以下图像。第一个图像显示了如何将一个基本类型数组(byte,short,int,long,float,double,char,boolean)存储在内存中。
作为对象的数组本身是使用new关键字实例化的,并在堆中分配了一些内存。但s ince它是一个原始类型的数组,它直接存储与其大小一样多的原始值。这些值设置为0(在int基本类型数组的情况下),除非我们使用诸如intArray[0] = 10;
然而,在refence类型数组的情况下,存在一个有趣的区别。 在使用new关键字进行实例化后,数组本身在堆上分配了一些内存空间。但它并不直接存储对象,而是存储对其所持对象的引用。这些引用将为null或对内存中某处的相应对象的引用(或地址)。除非使用类似于empArray[0] = new Employee(10, 20);
关于你的后续问题,在一个链表中,假设我试图找到一个位于的对象,假设从列表头部开始的第11个位置,我将不得不迭代10次才能找到它。因此,链表中元素的大小和位置将影响检索元素所花费的时间。然而,在一个数组中,我只需要知道索引,并在恒定时间内找到该元素。
答案 1 :(得分:0)
int
数组:将有一个内存块,其大小为int
的10倍,其中存储了值。
Employee
数组:将有一个内存块,其大小是对象引用的10倍,每个元素都将引用其他位置的Employee
对象在内存中(或者它将是null
)。