Java数组
Java数组简介
Java中即存在数组也存在容器(List,Map)等,Java数组与容器的比较主要从三个方面看:效率,类型,保存基本类型的能力。
1、效率方面看数组是随机存取数据最快的一种线性结构,容器则相对速度较低一些。
2、Java中的数组在保存对象时可以持有对象的具体类型,并且在编译期检查对象的类型。在泛型之前,其他容器在处理对象时是没有具体类型的(Java的擦除机制),全部视为Object类型。泛型之后容器同样可以拥有对象的基本类型。
3、对于保存基本类型的能力来说,数组毫无疑问是可以保存的,但是具体到容器在拥有泛型之后,同时结合Java的自动包装机制,容器同样可以持有基本类型(不过也不是严格意义上来说的)。
数组初始化及赋值
典型的数组初始化如下所示:其中数组标识符a是数组的一个引用,存放在栈中,指向放在堆中创建的一个真实对象(这个真实对象也可以是指向其他对象的引用)。
<span style="white-space:pre"> </span>int[] a = new int[n];
数组初始化有几种典型的形式如下:
<span style="white-space:pre"> </span>Object[] obj = new Object[n]; // 先声明后赋值
<span style="white-space:pre"> </span>for(int i = 0; i < n; i++){
<span style="white-space:pre"> </span> obj[i] = new Object();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>Object[] obj = {new Object(),new Object()} // 声明的同时并赋值
<span style="white-space:pre"> </span>Object[] obj1; // 先声明后赋值
<span style="white-space:pre"> </span>obj1 = obj
(这里需要强调一点,对象数组保存对象的引用,基本类型数组直接保存数组的值,对象数组在初始化时引用自动赋值为null,基本类型数组自动初始化为0,true等)
数组与泛型
数组与泛型是不相容的,主要的原因是数组需要知道它所持有的确切类型强制保证类型安全,而泛型中的擦除特性会移除所持有对象的类型信息。