1. 数组
1.1 数组的特点
Java中的数组,既能存储原始数据类型,又能存储对象类型。
数组元素的个数称为数组的长度。数组长度一旦确定,就不能改变。
数组元素的下标是从0开始的,即第一个元素的下标是0。
Java不支持多维数组,但是可以创建数组的数组。
Java中将数组作为对象处理。数组对象含有成员变量length,用来表示数组的长度。
1.2 一维数组
在Java里创建并使用一维数组,需要以下步骤:
- 声明一个数组变量来存放该数组。
- 创建一个新的数组对象并将其赋值给上一步所创建的数组变量。
- 在该数组中存储数据。
- 访问或修改此数组中存储的数据(元素)。
1.2.1 声明一维数组
语法:
这两种数组变量声明的方式在作用上是相同的,但通常建议采用第一种方式
实例
int[] weeks; boolean[] flag; float[] score;
|
1.2.2 创建一维数组
声明了数组变量之后,下一步就需要创建一个数组对象,并将其赋给所声明的数组变量。而创建数组对象,实际上就是在内存中分配相应大小的存储空间给数组。有两种方式可以用来创建数组对象。
在Java中,数组是引用对象,所以可以使用new运算符来直接创建一个数组对象,如以下代码所示:
int[] weeks = new int[7] ;
String[] studentNames = new String[10];
|
使用new运算符来创建数组对象时,必须指定这个数组的大小。创建数组对象时,仅仅是在内存中为数组变量分配指定大小的空间,并没有实际存储数据,这时数组的所有元素会被自动地赋予初值
- 数字数组,初值是0。 - 布尔数组,初值是false。 - 字符数组,初值是‘\0’。 - 对象数组,初值是null。
|
也可以通过把数组元素值直接放在大括号中的办法来同时完成创建和初始化数组,这时将在内存中分配与元素数量相适应的空间大小,并赋予指定的元素值,如以下代码所示。
int[] weeks = {1,2,3,4,5,6,7};
String[] studentNames = {"张小明","黄芳","赵秀丽"};
|
使用这种方法创建数组对象时,大括号里的元素类型必须与指定的数据类型一致,并且数组的大小与大括号中包含的元素个数相同。
1.3 多维数组
数组元素除了可以是原始数据类型、对象类型之外,还可以是数组,即数组的元素是数组。所以虽然Java不支持多维数组,但是可以通过声明数组的数组来实现同样的功能。元素数组还可以包含数组,依此类推,最后创建出达到需要的任意维数。
1.3.1 声明二维数组
语法:
数组类型[][] 数组名字;
数组类型 数组名字[][];
|
实例
int[][] year; boolean[][] flag; float[][] score;
|
1.3.2 创建二维数组
声明了数组变量之后,下一步就需要创建一个数组对象,并将其赋给所声明的数组变量。而创建数组对象实际上就是在内存中分配相应大小的存储空间给数组。有两种方式可以用来创建二维数组对象。
int[][] year = new int[52][7] ;
|
int[][] arrays2={{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35}};
int[][] arrays2 = {{11,12 },{21,22,23,24,25},{31, 34,35}}; boolean flags = {{true,false},{true,true,false,false},{false,false,true}};
|
1.4 数组操作
1.4.1 遍历数组
遍历一维数组
String[] studentNames = {"张三","李四","王伟","刘想"};
for (int i = 0; i < studentNames.length; i++){ System.out.println("第一种遍历打印>>>>> " + studentNames[i]); }
for (String item:studentNames) { System.out.println("第二种遍历打印 --->" + item); }
|
遍历二维数组
String[][] args = {{"张三","李四","王伟","刘想"},{"100","200","300","300"}};
for (int i = 0; i < args.length; i++){ for (int j = 0; j < args[i].length; j++){ System.out.println("第一种遍历: "+i+"-"+j+" >"+ args[i][j]); } }
for (String[] item:args) { for (String value: item){ System.out.println("第二种遍历打印 --->" + value); } }
|
1.4.2 数组填充(fill)
语法
Arrays.fill(数据类型[] 数组变量名, value)
Arrays.fill(数据类型[] 数组变量名, startIndex,endIndex,value)
|
实例
public static void testFill(){ int[] number = new int[5]; Arrays.fill(number,10); System.out.println(Arrays.toString(number)); int[] number2 = new int[5]; Arrays.fill(number2,0,3,6); System.out.println(Arrays.toString(number2)); }
|
1.4.3 数组排序(sort)
int[] arr = {23,90,72,37,662,12}; System.out.println(Arrays.toString(arr)); Arrays.sort(arr); System.out.println("排序后:"+ Arrays.toString(arr));
|
1.4.4 数组复制(copyOf、copyOfRange)
int[] number = {23, 90, 72, 37, 662, 12, 239, 234}; int[] number1 = Arrays.copyOf(number, 5); System.out.println(Arrays.toString(number1)); int[] number2 = Arrays.copyOfRange(number,3,6); System.out.println(Arrays.toString(number2));
|