一维数组
对于Java语言的基本数据类型,一个变量只能存储单一的值。但在实际运用中,通常需要使用一种表示数据集合的类型来实现程序中的复杂逻辑。这是就用到了数组,Java中的数组包括一维数组、二维数组、多维数组以及不规则数组。在数组中,各个变量通过下标来控制。数组的下标从0开始。
数组的声明
数组在使用前必须先声明
语法:
//第一种
数据类型[] 数组名;
//第二种
数组类型 数组名[];
数组的声明和基本数据类型的声明类似,只不过添加了中括号来表示声明的是一个数组。其中,第一种声明数组的方式更符合面向对象的程序设计规则,建议在实际编程中使用。
数组的定义
需要注意的是,语句int[] results;只具有声明的作用,并未将results定义为真正的数组,定义数组应使用关键字new来实现。
语法:
数据类型[] 数组名 = new 数据类型[长度];
/*
* 语法说明:
* 1.关键字new用于为数组分配内存空间
* 2长度是指数组的容量,在定义数组时必须指定长度。
* 注意:
* 1.数组名的命名规则与变量名相同。
* 2.[]是数组的标志,不能用其他符合代替。
* 3.在Java语言中,不能在声明数组时指定数组的长度,而应该在定义时指定。
* 如:
* int x[5]; //编译时将出现错误。
* int[] x = new int[5]; //正确
*/
数组的初始化
数组的默认初始化
数组定义之后,就确定了数组的长度。同时,数组中的元素会被赋予一个默认的初始值。默认初始值根据数组中元素的类型来确定。如:数组中的int类型元素时默认初始值是0,char类型的默认初始值是“\u0000”、Boolean类型的默认初始值是false,而引用类型的默认初始值是null。
数组的赋值初始化
如果我们希望在定义数组的时候,给数组中的元素赋予非0的初始值,那么就需要对数组进行赋值初始化。在Java程序中,存在创建数组并同时赋予元素值得简写形式,如:
int[] array = {1,2,3,4,5}
这种赋值初始化得形式,甚至不需要new关键字,右边{}内元素得个数就说明了数组得长度。另外还有一种赋值初始化的形式,如:
//这种赋值初始化使用new关键字,定义得更加完美。
int[] array = new int[]{1,2,3,4,5}
//数组一旦创建,长度将无法再改变。
数组的赋值
单个赋值
数组得初始化可以使用{}来进行整天赋值,可是数组一旦定义,就不能再进行整体赋值了。
示例:
/**
* 数组单个赋值
* */
public class Demo_one {
public static void main(String[] args){
int[] intArray = new int[5];
//intArray = {1,2,3,4,5},错误,提示非法得表达式开始。
//此时就需要对数组元素逐个进行赋值
intArray[0] = 5;
intArray[1] = 4;
intArray[2] = 3;
intArray[3] = 2;
intArray[4] = 1;
System.out.println(intArray[0]+","+intArray[1]+","+intArray[2]+","+intArray[3]+","+intArray[4]);
}
}
循环赋值
逐一赋值的方式效率是比较低的。如果数组有成百上千个元素,那么就需要逐一赋值成千上百次,这样数组的优势就体现不出来。事实上,数组最常用的赋值方式是循环赋值,依靠for语句进行逐个遍历赋值。
示例:
/**
* 使用for循环进行循环赋值和输出
* */
public class Demo_one {
public static void main(String[] args){
int[] intArray = new int[5];
for (int i=1; i<6; i++){
intArray[i-1] = i*2;
}
for (int n:intArray) {
System.out.print(n+"\t");
}
System.out.println();
}
}
效果图如下:
使用数组实现排序算法
冒泡排序:
冒泡排序是指依次比较相邻的二个数,将较大的数放在前面,较小的数放在后面。
示例:
/**
* 使用冒泡排序
* */
public class Demo_one {
public static void main(String[] args){
int[] array = new int[]{5,4,8,9,2,1,7,2,5,4};
System.out.println("没有排序之前的数组:");
for (int n:array) {
System.out.print(n+"\t");
}
System.out.println();
//冒泡排序的主要实现逻辑
for (int i=0; i<array.length-1; i++){
for (int j=0; j<array.length-1-i; j++){
int temp = 0;
if(array[j] > array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
//排序后,数组结构改变
System.out.print("排序后的数据是:");
for (int n:array) {
System.out.print(n+"\t");
}
System.out.println();
}
}
效果图如下:
使用工具类Arrays进行数组排序
示例:
import java.util.Arrays;
/**
* 使用工具类Arrays进行数组排序
* */
public class Demo_one {
public static void main(String[] args){
int[] array = new int[]{5,4,8,9,2,1,7,2,5,4};
System.out.println("没有排序之前的数组:");
for (int n:array) {
System.out.print(n+"\t");
}
System.out.println();
//使用工具类Arrays进行数组排序
Arrays.sort(array);
System.out.print("排序后的数据是:");
for (int n:array) {
System.out.print(n+"\t");
}
System.out.println();
}
}
效果图如下:
二维数组
一维数组并不能解决Java程序中所有的问题,有时还需要使用二个或更多的下表来确定表格中的数据,如:生活中常见的乘法表、食物和相应的营养值、区域人口表等。这就涉及二维数组的应用。
二维数组的声明
语法:
1.数据类型[][] 数组名;
2.数据类型 数组名[][];
3.数据类型[] 数组名[];
二维数组的定义
与一维数组类似,二维数组中语句int x[ ][ ],只具有声明的作用,并未将x定义为正在的二维数组。二维数组也使用操作符new来定义。如:
int[][] x;
x = new int[2][3];
//也可以在声明数组类型的同时进行定义
int[][] x = new int[2][3];
二维数组的初始化
语法:
//第一种
int[][] x = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
//第二种
int[][] x = {{1,2,3},{4,5,6},{7,8,9}};
二维数组的遍历
二维数组的实质是一维数组的数组,在进行遍历访问时,可以使用嵌套循环来遍历。
示例:
/**
* 遍历二维数组
* */
public class Demo_one {
public static void main(String[] args){
int[][] intArray = new int[3][4];
for (int i=0; i<3; i++) {
for (int j = 0; j < 4; j++) {
intArray[i][j] = i + j;
}
}
for (int[] array: intArray) {
for (int n: array) {
System.out.print(n+"\t");
}
System.out.println();
}
}
}
效果图如下: