java基础:数组

Java编程思想 中对数组(Arrays)的评价是

数组是最有效率的存储和随机访问一组对象引用的方法。

相比与其他容器,数组有高效、类型、能够存储基本类型的特点。数组可以看成是一种引用类型,使用new关键字创建。数组对象(注意数组名只是一个对对象的引用)被创建在堆上一块连续的空间,一旦确定其大小后将不能更改。创建时需要申明数组的类型,在编译期间JVM会对数组进行类型检查。这种类型安全与泛型(generics)有着相同的功能。数组可以存储基本数据类型,而其他容器严格意义上来讲只能存储Object,不能存储基本数据类型(java5之后,JVM能够自动将基本数据类型加箱(boxing)为其对应的包装类型)。基本数据类型数组entry存的是值,Object类型数组entry存的是object的引用,用图表示为:
Picture Dead

1. 数组的初始化:

```java
//动态创建数组,指定大小。JVM为其分配空间并自动初始。(基本数据类型对应默认值,Object对应null)
type[] array = new type[5]; 
//静态创建数组,创建的同时为其初始化。由JVM计算其大小。
int[] array  = {1,2,3,4,5};//初始化列表形式。
int[] array = new int[]{1,2,3,4,5};
// 静态创建也可分开来写
int[] array;//申明,不会分配空间,array是一个引用,为null,所以此时指定长度是不合法的。
array= new int[5];//申请空间,初始化为0;

int[] array;
array = new int[]{1,2,3,4,5};
```

对于初始化问题,需要注意的是只要分配了空间(包括引用变量,new关键字新建实例分配空间),JVM都会自动初始化为默认值(引用变量默认为空为null)。对于成员变量,若只是申明没有初始化,JVM会自动初始化(编译时分配空间)。而对于方法变量,必须主动为其初始化后才能使用。因为方法是调用时才分配空间。方法都是工作在栈中,在被调用时方法会被分配一个栈帧,这个栈帧的大小需要在编译时确定。所以对于方法变量,我们必须为其主动初始化。所以对于方法变量创建数组必须分配空间才能使用。

2. null与[ ]

数组为空和数组为0是有区别的,在边界检测是需要注意

```java
int[] array = null;//数组为空不指向任何对象
int[] array = new int[0];//一个长度为0的数组
// 如果一个空数组 array
if(array == null || array.length ==0)// ||具有短路原则,先判断array == null,若符合,则不再检查array.length==0(| 不具有短路原则)
if( array.length ==0 || array == null)// 会报空指针错误
```

3. 多维数组。

java中可以定义多维数组,下面以二维数组为例:

//申明三种方式
int[][] array;
int array[][];
int[] array[];
//动态初始化
int[][] array = new int[3][3];//多维数组第一维长度必须给出,其余可以不给出。
//静态初始化
int array[][] = {{1,2,3},{4,5,6},{7,8,9}};
//对数组第一维初始化
array[0] = new int[10];

需要注意的是,java中二维数组的第二维可以不同

int[][] array = {{1,2},{3,4,5}};

4. 有关数组的一些操作。

java 的 Arrays 类提供了一系列的静态方法对数组进行操作

```java
Int[] array = new int[]{1,2,3,4,5}
Int[] nullarray = new int[5];

Arrays.sort(array);//对整个数组进行升序排序
Arrays.sort(array,2,5);//对数组2到4进行升序排序

Arrays.fill(nullarray,5)//对整个数组填充
Arrays.fill(nullarray,2,5,5)//对数组2到4填充5

boolean a = Arrays.equals(array, nullarray);//比较元素是否相等,不能用“==”

Arrays.toString(array);//转换为字符串“[1,2,3,4,5]”(作为输出)

Int index = Arrays.binarySearch(array,10);//二分查找查找返回索引,注意数组必须是排好序的

Arrays.copyOfRange(array,0,3)//数组slice,返回{1,2,3}(不包含最后一个)

```

(补充,数组与ArrayList,数组与数据结构的构造,数组与collection)

posted @ 2017-05-12 16:09  zhou_R_K  阅读(166)  评论(0)    收藏  举报