数组
什么是数组?
所谓数组,就是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种数据形式。这些按一定顺序排列的同类型数据的集合,称之为数组。
数组中的每一个数据称之为元素,数组中的元素以索引来表示其存放的位置,索引从 0 开始,步长是1。
为什么要使用数组?
声明变量时,每一个单独的变量都要对应一个变量名,但现在要处理一组相同类型的数据时,比如,表示一个班的45名同学的年龄时,难道要定义45个变量?这时候就用上数组了。
数组的初始化
Java中数组必须先初始化后才能使用,所谓初始化就是给数组元素分配内存,并为每一个元素赋初始值。初始化分为两种:
静态初始化:
特点:由我们自己来为每一个数组元素设置初始化值,而数组的长度由 JVM 决定。
语法:数组元素类型 [ ] 数组名 = new 数组元素类型 [ ] { 元素1,元素2,元素3。。。 }
例子:
package Test;
/**
*
* @author FYDragon
*
*/
public class TestDemo {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10}; //初始化一个数组
int length ;
length = arr.length;
System.out.println("数组的长度:"+length);
for (int i = 0; i < length; i++) {
System.out.println(arr[i]);
}
}
}
分析:首先初始化一个一维数组,利用数组中的一个方法(数组名 . length)获取到数组的长度,利用 for 循环,输出数字每个元素。
解释一下数组所占内存情况
假设初始化两个数组:
int[] arr = new int[]{1,2,3,4,5};
int[] arr1 = new int[]{2,4,7};
每当我们初始化一个数组时,在堆中会初始化一个内存空间,空间中有初始化时所赋的值,每一个空间都有一个内存地址,当我们想使用这个内存空间,就需要栈从堆中获取这个空间的内存地址,
如果将arr 引用0x2048,那么剩余的那个0x1234 就没有作用,变成了垃圾,等待垃圾回收机制处理。
动态初始化:
有我们来设置数组的元素个数(数组长度),而每一个数组元素的初始值是由系统决定。
语法:
数组元素类型[] 数组名 = new 数组元素类型[ 数组长度 ];
如:int[] arr = new int[10];
注意:
(1)数组的下标是从0开始的,如果想获取数组的第n个元素,可以访问[n-1]元素获得
(2)int[] arr = new int[5]{1,2,3,4,5}; 这种写法是错误的!
(3)当我们事先知道要存储哪些数据的时候,使用静态初始化。反之使用动态初始化
数组的基本操作:
1:数组基本操作:
获取元素: 元素类型 变量 = 数组名[index];
设置元素: 数组名[index] = 值;
遍历数组元素: 建议使用for循环,事先知道循环的次数.
数组长度: int len = 数组名.length; length是属性,不是方法.
索引范围: 从0开始,逐一递增. [0,数组名.length-1]
2:操作数组常见异常:
NullPointerException:空指针异常(空引用).
当数组还未初始化,就直接操作数组.
String[] bs = null;
System.out.println(bs.length)
ArrayIndexOutOfBoundsException:数组的索引越界异常.
3:获取数组最大最小元素(getMax,getMin).
4:打印数组元素:
直接打印数组的时候,打印出来是hashCode值,如[I@7439aca7.
我们不喜欢,我们想打印数组的时候,把该数组的元素打印出来.
String[] arr = {"A","B","C","D","E"};
定义方法打印:
字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。
打印格式:[A, B, C, D, E]
5:逆序排列数组元素:
原数组:[A, B, C, D, E]
逆序操作
新数组:[E, D, C, B, A]
6:元素出现索引(第一次/最后一次),线性搜索.
int[] arr = {10,20,30,10,50,-30,10};
获取元素10在arr数组中第一次出现的索引(indexOf): 0
获取元素10在arr数组中最后一次出现的索引(lastIndexOf):6
多维数组
数组是多个数据的集合.
int[] arr = new int[] {1,3,5,7,9};
如果现在有多个数组,我想把多个数组保存在一个集合中,此时我又应该如何完成.
int[] arr1 = {1,2,3};
int[] arr2 = {4,5};
int[] arr3 = {6};
把上述的每个数组都作为一个元素,那么此时元素的类型为:int[]。
格式:
数组元素类型[] 数组名;
int[][] arr = new int[][] {
arr1 ,arr2,arr3
};
说白了,就是将一维数组中的每一个元素都换成一个一维数组,就是二维数组。以此类推。
例子:
package Test;
/**
*
* @author FYDragon
*
*/
public class TestDemo {
public static void main(String[] args) {
int[][] arrs = {{50,51,55},
{53,87,65},
{27,53,48}}; //定义一个三行三列的数组并且赋值
//对m每个元素进行输出
for(int i = 0 ; i <= 2; i++){
for(int j = 0; j <= 2; j++){
System.out.print(arrs[i][j]+" ");
}
System.out.println();
}
}
}
结果: