Java数组


Java数组

​ 在Java中,有大量的方式可以持有对象。而数组是一种效率最高的存储和随机访问对象引用序列的方式。数组是一个简单的线性序列,这使得元素访问非常快速。但在其生命周期中数组对象的大小被固定且不可改变。

​ 数组有三种初始化方法,下面看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Main {
public static void main(String[] args) {
int[] i1 = {1, 2, 3};//第一种
int[] i2 = new int[]{1, 2, 3, 4};//第二种
int[] i3 = new int[5];第三种
for (int i = 0; i < i3.length; i++) {
i3[i] = i + 1;
}
print(i1);
System.out.println();
print(i2);
System.out.println();
print(i3);
}

private static void print(int[] ii) {//输出数组元素
for (int i : ii) {
System.out.printf("%d ", i);
}
}
}

反编译之后发现编译器做了如下处理:

1
2
3
int[] i1 = new int[]{1, 2, 3};
int[] i2 = new int[]{1, 2, 3, 4};
int[] i3 = new int[5];

可以看到表面上我们用到了三种初始化方法,实际上Java编译器背地里将第一种方法转成了第二种方法。但是第一种方法只能用在定义数组的时候初始化,而第二种和第三种方法就没有这个限制了。

​ 数组可以分为基本类型数组和引用数组,他们的唯一区别就是基本类型数组开辟的内存空间是直接存的值,而引用数组存的是对象的引用。

​ 我们分析上面三种初始化方法,无论是静态指定数组长度的第三种方法,还是动态推测数组长度的一二种方法。都会显式或隐式的使用关键字new,我们都知道关键字new用于内存分配,也就是说数组的数据存在堆区,栈区存放的是数组的引用。

​ 下面我们来讲一下二维数组,理解了上面的话二维数组就是小意思了。二维数组可以理解成一维数组的每个元素都是数组。二维数组就相当于构建了一个一维数组,堆区的每个元素存放的是元素数组的引用,而数组数据则放在堆区的另外一块内存中。

​ 多维数组的情况跟二维数组就比较类似了,无非就是数组元素是数组引用,内层数组元素又是引用,等等等等,以此类推。

​ 在Java中,很多容器的底层都是用数组实现的,数组因为是长度不可改变的,所以在开发中需要写更多的代码来适应各种情况,那么各种容器就是对一些常用的操作进行封装,对开发速度有显著提升。


文章作者: Amos Liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Amos Liu !
 上一篇
算法练习2 算法练习2
算法练习2Median of Two Sorted ArraysThere are two sorted arrays nums1 and nums2 of size m and n respectively. Find the media
2017-04-15
下一篇 
Java自动装箱/拆箱 Java自动装箱/拆箱
Java自动装箱/拆箱什么是装箱/拆箱​ 在Java中一共有四类八种基本数据类型,在JDK1.5中,给这四类八种基本数据类型加入了包装类,对应如下: 基本类型 包装类型 byte Byte short Short
2017-04-02
  目录