数组的概念:
在java编程思想中,对数组的描述是这样的:数组只是相同类型的、用一个标识符名称封装到一起的一个对象序列或者基本类型数据序列。也就是说,数组中的元素既可以使java中的基本数据类型,也可以是对象。
//定义数组的两种方式
int [] arr;//java的通常写法
int arr[];//C、C++的书写习惯
这个时候,我们已经定义了一个数组,但是这只是定义了一个对数组对象的引用,还没有给数组对象分配空间。要分配空间,需要对数组进行初始化。
Object[] arr1 =new Object[arrSize];
上面的语句做了三件事情,首先定义了一个数组引用变量arr1,然后使用Object[arrSize]创建了一个Object类型的数组,并把新创建的数组的引用赋值给了引用变量arr1。
此外,还有一种方法可以创建数组,如下所示:
Object[] arr2={value1,value2,value3……valuen};
所有的数组都有一个固有成员,即length属性,通过length属性,可以获知数组内包涵了多少个元素,但是不能够对数组大小进行修改(这也是数组与集合的差别之一)。在Java中,数组的计数也是从0开始,所以数组的最大下标数为length-1。如果在访问数组的时候,超出下标界限,则会抛出ArrayIndexOutOfBoundsException。
在Java中,数组与其他的容器之间的区别主要体现在三个方面:效率,类型和保存基本类型的能力。在Java中,数组的的存储和随机访问对象引用序列效率是最高的。相比之下,就算是集合中效率较高的ArrayList的效率也比不上数组。但是,高效率也带来了一些代价,数组的大小一旦被创建就被固定了,并且在其生命周期不可改变。
数组的另一个好处是可以直接放入基本类型,而容器则不能,容器看似能够持有基本类型,是因为自动包装机制的出现。
遍历数组
遍历数组可以用普通for循环或者forech进行遍历。
public class ArrayTest1 {
public static void main(String[] args) {
int[] arr={10,23,12,15,16,17};
//使用普通for循环遍历数组
for(int i=0;i<arr.length;i++){
System.out.println(+arr[i]);
}
//使用增强for循环遍历数组
for (int i : arr) {
System.out.println(i);
}
}
}
数组作为函数的参数
public void ArrayTest2(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(+arr[i]);
}
}
数组作为函数的返回值
public static int[] ArrayTest2(int[] arr) {
int[] arr1 = new int[list.length];
for (int i = 0, j = arr1.length - 1; i < arr.length; i++, j--){
arr1[j] = arr[i];
}
return arr1;
}
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
String str[][] = new String[4][5];
多维数组的初始化,直接分配空间:
Object arr = new Object[arrlenght1][arrlenght2];
Arrays工具类
java.util类库中的Arrays类,提供了一套用于数组的static实用方法,其中有6个基本方法。
方法 | 方法说明 |
---|---|
sort() | 根据其元素的自然顺序进行升序排列 |
fill() | 将指定的值填充到数组中的各个位置 |
binarySearch() | 用于在已经排序的数组中查找元素 |
equals() | 用于比较两个数组是否相等 |
toString() | 产生数组的String表示 |
hashCode() | 产生数组的hashcode码 |