数组
数组的概念:一种容器,可以同时存放多个数据。
特点:
1.数组是一种引用数据类型。
2.数组当中的多个数据,类型必须统一。
3.数组的长度在程序运行期间不可改变。
数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。
两种常见的初始化方式:
1.动态初始化(指定长度)
2.静态初始化(指定内容)
动态初始化数组的格式:
数据类型 [] 数组名称 = new 数据类型[数组长度];
静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,…};
使用静态初始化数组的时候,格式还可以省略一下:
数据类型[] 数组名称={元素1,元素2,…};
注意事项:
1.虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容也可以自动推算出来长度。
2.静态初始化和动态初始化标准格式可以拆分成为两个步骤。
3.静态初始化一旦使用省略格式,就不能拆分成为两个步骤了。
如果不确定数组中的具体内容,用动态初始化,否则已经确定了具体的内容用静态初始化。
直接打印数组名称,得到的是数组对应的:内存地址哈希值。
public class Array {
public static void main(String[] args) {
//创建一个数据类型为int,数组长度为5的数组array。
int[] array = new int[5];
//此时打印的结果为内存地址哈希值
System.out.println(array);
}
}
访问数组元素的格式:数组名称[索引值]
索引值:就是一个int数字,代表数组当中元素的编号。
注意:索引值是从0开始,一直到“数组的长度-1“为止
使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值,规则如下:
如果是整数类型,那么默认为0;
如果是浮点类型,那么默认为0.0;
如果是字符类型,那么默认为‘\u0000’;
如果是布尔类型,那么默认为false;
如果是引用类型,那么默认为null;
静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
int[] array B = array A;将array A 数组的地址值赋值给array B数组。
如果访问数组元素的时候,索引编号并不存在,那么将会发生数组索引越界异常。
ArrayIndexOutOfBoundsException 原因:索引编号写错了
解决:修改成为存在的正确索引编号。
所有的引用类型变量。都可以赋值为一个null值,但是代表其中什么都没有。
数组必须进行new初始化才能使用其中的元素。如果只是赋值了一个null,没有进行new创建,那么将会发生:空指针异常 NullPointerException。
获取数组的长度:int(数据类型) len(数据名称)=数组名称.length
这将会得到一个int数字,代表数组的长度。
public class Test {
public static void main(String[] args) {
//创建一个名为arrayA的静态数组
int[] arrayA = {10, 20, 30, 40,50};
int len = arrayA.length;
//输出数组的长度
System.out.println(len);
}
}
数组一旦创建,程序运行期间长度不可改变。
遍历数组:对数组当中的每一个元素进行逐一、挨个儿处理。默认的处理方式就是打印输出。
数组元素的反转:
本来的样子:【1,2,3,4】
反转的样子:【4,3,2,1】
1.数组元素的反转其实就是对称位置的元素交换
2.通常遍历数组用的是一个索引
int i=0;
现在表示对称位置需要两个索引
int min=0;
int max=array.length-1;
3.如何交换两个变量的值?
int a=10;
int b=20;
如果是两个水杯,都是满的,如何交换?借助第三个杯子
int temp=a;
a=b;
b=temp;
4.什么时候停止交换?
(1)当min==max;
(2)或者min>max;
什么时候应该交换?min<max;
数组可以作为方法的参数:
当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值。
任何数据类型都可以作为方法的参数。
数组最大值:
public class ArrayMax {
public static void main(String[] args) {
int[] array = {5, 15, 30, 20, 100, 1000};
int max = array[0];
for (int i = 1; i <array.length; i++) {
//如果当前元素比max更大,则换
if (array[i] > max) {
max = array[i];
}
}
System.out.println("最大值:" + max);
}
}
数组反转:
public class ArrayReverse {
public static void main(String[] args) {
int[] array = {10, 20, 30, 40, 50};
for (int min = 0, max = array.length - 1; min < max; min++, max--) {
int temp = array[min];
array[min] = array[max];
array[max] = temp;
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}