文章目录
java之数组
数组的概述
- 数组是存储多个变量(元素)的东西(容器)
- 这多个变量的数据类型要要一致
数组:存储同一种数据类型的多个元素容器
数组定义格式
A:数据类型[] 数组名;
B:数据类型数组名[];
举例:
int[]arr; 定义了一个int类型的数组,数组名是arr
int arr[] ;定义了一个int类型的变量,变量名是arr数组
//不推荐
错误的声明数组的方式,声明数组的时候不能指定其大小
int [5] intErrorArray0;
int intErrorArray1[5];
数组初始化
java中数组必须先初始化,然后才能使用。
所谓初始话,就是为了数组中的数组元素分配内存空间。并为每个数组元素赋值。
数组的初始化方式
动态初始化
动态初始化:初始化时只指定数组长度,又系统为数组分配初始值。
格式: 数据类型[]数组名 = new 数据类型[数组长度]
举例:
int[]arr = new int[3];
左边:
* int:说明数组中的元素的数据类型是int类型
* []:说明这是一个数组
* arr:是数组的名称
右边:
* new:为数组分配内存空间
* int:说明数组中的元素的数据类型是int类型
* 3:数组的长度,其实就是数组中的元素个数
* []:说明这是一个数组
注意:一旦创建了数组,就不能在改变它的长度(不过,当然可以改变单个的数组元素)。如果程序运行中需要经常扩展数组的大小,就应该使用另一种数据结构——数组列表(array list)
静态初始化
静态初始化;初始化时指定每个数组元素的初始值,由系统决定数组长度
例如:
int[] smallPrimes = {2,3,5,7,11,13};
最后一个值后面允许有逗号,如果你要不断为数组增加值,这回很方便。
还可以声明一个匿名数组:
new int [] {17,19,23,29,31,37}
这会分配一个新数组并填入括号中提供的值,它会统计初始值的个数,并相应地设置数组大小。可以使用这种语法重新初始化一个数组而无须创建变量。例如:
array = new int[] {1, 2, 5, 89};
这个语句是下面语句的简写:
int[] tempArray = {1, 2, 5, 89};
array = tempArray;
注意:在Java中允许数组长度为0。在我们要编写一个结果为数组的方式时,如果碰巧结果为空,那么这种语法形式显得特别有用。此时可以创建一个长度为0的数组:值得注意的是:数组长度为0和null是不一样的,这个需要特别注意。null代表这个数组并不存在,长度为0表示这个数组不包含任何元素,但是数组是存在的。
访问数组元素
创建一个数字数组时,所有元素都初始化为0。
boolean数组的元素会初始化为false。
对象数组的元素则初始化为一个特殊值null,表示这些元素还未存放任何对象。
注意:访问超过了数组的元素,就会出现“array index out of bounds”异常。
想要获得数组中的元素个数,可以用array.length。
for each 循环
java有一种功能很强的循环结构,可以用来依次处理数组(或者其他元素集合)中的每个元素,而不必考虑指定下的值。
格式:
for(循环对象的类型 元素名:对象名){
语句
}
for 循环写法
int[] arr ={1,2,3,4,5};
for(int i = 0; i<arr.length; i++){
System.out.println(arr[i]);
}
for each格式
for(int data :arr){
System.out.println(data);
}
总结:for each循环语句显得更加、更不易出错,因为你不必为了下标的起始值和终止值而操心。如果需要用下标值时或者不想遍历所有元素的时候。
还有一个更加简单的方式打印数组中的所有值,即利用Arrays类的toString方法。调用Arrays.toString(a),返回一个包含数组元素的字符串,这些元素包括在中括号内,并用逗号分隔,例如,“[2,3,5,7,11,13]”。要想打印数组,只需要调用
System.out.print(Arrays.toString(a));
数组拷贝
分别为:for clone() System.arraycopy()Array.copyOf()
要研究数组的拷贝,先看看浅拷贝与深拷贝的概念:
概括起来讲,浅拷贝就是指两个对象公用一个值,一个的改变了另一个也会随之改变,深拷贝则是两个对象虽然值相等,但是相互独立互不影响。
一、For写法
public static void main(String[] args) {
int[] array1 = new int[]{1, 2, 8, 7, 6};
int[] array2 = new int[array1.length];
for (int i = 0;i < array1.length;i++){
array2[i] = array1[i];
}
System.out.println("arra