目录
数组是具有相同数据类型的一组有序数据的集合。数组中的每个元素都属于同一个数据类型,不同 数据类型的数据不能放在同一个数组中。
在Java数组分为一维数组,二位数组,多维数组。
数组的基本要素:
- 标识符:数组的名称,用于区分不同的数组
- 数组元素:向数组中存放的数据
- 元素下标:对数组元素进行编号,从0开始,数组中的每个元素都可以通过下标来访问
- 元素类型:数组元素的数据类型
1:一维数组
数组的访问是通过索引完成的,即数组名称[索引],但是需要注意的是,数组的索引从0开始,所以索引的范围就是0~(数组长度-1)。例如,一个长度为3的数组,可以使用的索引是0,1,2,如果访问超过了数组的索引范围,就会产生错误,在Java中有一种动态获得数组长度的方式是“数组名称.length”。
#1.1:数组的声明
数据类型[ ]数组名称=new 数据类型[长度 ];
- 声明一个变量就是在内存空间划出一块合适的空间
- 声明一个数组就是在内存空间划出一串连续的空间
例如:声明一个int型数组。
public class test{
public static void main(String[]args){
int num[]=new int[3];//创建一个长度为3的数组
}
}
例如:采用分步的模式创建数组空间。
public class arr{
public static void main(String[]args){
int num[]=null;//声明变量
num=new int[3];//创建一个长度为3的数组
}
}
注意 :数组属于引用数据类型,所以在数组使用之前一定要分配空间(实例化),如果使用了没有空间的数组,就会出现错误。例如
public class arr{
public static void main(String[]args){
int num[]=null;
System.out.println(num[x]);//未分配空间会显示异常。
}
}
#1.2:数组的赋值
数组的赋值分为静态赋值和动态赋值。
@1:静态赋值
public class arr{
public static void main(String[]args){
//一步到位赋值,第一种
int num[]={10,20,30};
//一步到位赋值,第二种
int nun[]=new int[3]{10,20,30};
}
}
@2:动态赋值
import java.util.Scanner;
public class arr{
public static void main(String[]args){
//动态赋值第一种方式,分布赋值
int num[]=null;
num=new int[3];//创建一个长度为3的数组
num[0]=10;//数据赋值
num[1]=20;
num[2]=30;
//动态赋值第二种方式,键盘输入
Scanner sc=new Scanner(System.in);
int[]nun=new int[3];
for(int i=0;i<nun.length;i++){
nun[i]=sc.nextInt();//通过键盘输入动态赋值
}
}
}
#1.3:一维数组的遍历
@1:第一种方式
实例代码如下:
public class arr{
public static void main(String[]args){
int[]num={1,2,3,4,5};//创建一个有5个元素的数组
for (int i = 0; i < num.length; i++) {//进行遍历
System.out.print(num[i]+"\t");//输出其中的元素
}
}
}
@2:第二种方式:for-each
for-each是增强的for循环,在遍历集合和数组时使用比较方便。语法格式如下:
for(元素数据类型 元素变量 :遍历对象){
//循环体代码块
}
实例代码如下:
public class arr{
public static void main(String[]args){
int[]num={1,2,3,4,5};//创建一个有5个元素的数组
for (int i:num) {//进行遍历
System.out.print(i+"\t");//输出其中的元素
}
}
}
#1.4:一维数组的排序
一维数组排序就是将数组中原本无序的数据进行处理后,使数组中的数据从小到大(升序)排列,或者使数组中的数据从大到小(降序)排列。
Arrays类位于java.util包中,主要提供操作数组的各种方法,如排序,查询等。Arrays类的sort()方法可以对数组进行升序排列,语法如下:
Arrays.sort(数组名);
@1:升序
例如:对数组“9,4,5,2,0,1”进行升序排列代码如下:
import java.util.Arrays;
public class arr{
public static void main(String[]args){
int[]num={9,4,5,2,0,1};
Arrays.sort(num);
for (int i:num) {
System.out.print(i+"\t");
}
}
}
@2:降序
降序有两种方法。第一种是我们首先使用Arrays.sort()对数组进行升序排列,然后再通过交换数组元素的方式将其变为降序排列,第二种则是可以使用Java 8中引入的流式操作和Comparator来实现。
!1:第一种
import java.util.Arrays;
public class arr {
public static void main(String[] args) {
int[] arr = {5, 3, 9, 1, 7};
Arrays.sort(arr);
for (int i = 0; i < arr.length / 2; i++) {
//arr.length / 2是因为我们在交换数组元素时,只需要对数组的前半部分进行操作,
// 交换后半部分的元素会自动被交换到正确的位置。因此,我们只需要遍历数组的前半部分,
// 并且对应的交换元素的位置是arr.length - 1 - i,其中i是当前遍历的索引。
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];// 将数组前半部分的元素与对应的后半部分元素交换
arr[arr.length - 1 - i] = temp;// 将数组后半部分的元素与对应的前半部分元素交换
}
System.out.println(Arrays.toString(arr)); // 输出:[9, 7, 5, 3, 1]
}
}
!2:第二种
在使用Collections 类访问的 reverseOrder()时我们需要进行导包即import java.util.Collections;
import java.util.Arrays;
import java.util.Collections;
public class arr {
public static void main(String[] args) {
Integer[] arr = {5, 3, 9, 1, 7};
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(Arrays.toString(arr)); // 输出:[9, 7, 5, 3, 1]
}
}
注意:
- 将数组元素的类型从int改为Integer是为了使用Arrays.sort()方法和Collections.reverseOrder()来实现数组的降序排列。在Java中,基本类型(如int)不具备实现Comparator接口的能力,而Integer是一个类,可以通过实现Comparator接口来定义自定义的比较规则。通过将数组元素的类型改为Integer,我们可以使用Collections.reverseOrder()来获得一个降序排列的Comparator,然后将其传递给Arrays.sort()方法,从而实现数组的降序排列。
- 如果数组元素的类型为int,我们无法直接使用Collections.reverseOrder(),因为它要求传入一个Comparator类型的参数。因此,我们需要将数组元素的类型改为Integer,以便使用Collections.reverseOrder()来实现降序排列。
#1.5:一维数组元素的查找与比较
一维数组的查找与比较就是在一个数组中查找与某个元素是否存在。
例如:现有一个数组里存储了十个整数,需要查找8是否在数组中。只需要for循环对数组进行遍历,用数组元素和8进行比较,如果相等就退出循环,对应代码如下:
public class arr {
public static void main(String[]args){
int[]num={1,4,6,7,8,9,32,23,15};
boolean flag=false;
for (int i = 0; i < num.length; i++) {
if(num[i]==8){
flag=true;
break;
}
}
if(flag){
System.out.println("该数组中存在8这个数");
}
else{
System.out.println("该数组中不存在8这个数");
}
}
}
数组的查找与比较也可以用于求一个数组的最大值和最小值。下面介绍求数组的最小值
例如:从键盘输入6个数,求最小值
import java.util.Scanner;
public class arr {
public static void main(String[]args){
int []num=new int[6];
int min=0;//记录最小值
Scanner sc=new Scanner(System.in);
System.out.println("请输入6个数:");
for (int i = 0; i < num.length; i++) {
num[i]=sc.nextInt();
}
//计算最小值
min=num[0];//假设0索引下的数是最小值
for (int i = 0; i < num.length; i++) {
if(num[i]<min){
min=num[i];
}
}
System.out.println("最小值为:"+min);
}
}
2:二维数组
@2.1:数组的声明
二维数组是由多个一维数组组成的数组。它可以被看作是一个表格或者矩阵,其中每个元素都有两个索引,一个用于指定行,另一个用于指定列。在编程语言中,二维数组可以通过在声明时指定两个维度的大小来创建。
在Java中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java 并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组,以达到同样的效果。声明二维数组的语法如下:
type array[][];
type[][] array;
其中,type 表示二维数组的类型,array 表示数组名称,第一个中括号表示行,第二个中括号表示列。
@2.2:数组的赋值
数组的动态初始化:
数据类型 数组名称[ ][ ]=new 数据类型[行个数][列个数];
数组的静态初始化:
数据类型 数组名称[ ][ ]=new 数据类型[行个数][列个数]{值,值,......}{值,值,......}{值,值,......}{......};
@2.3:数组的遍历
二维数组要通过两个下标来获取,由于数组的下标起始值为 0,因此行和列的下标需要减 1。
获取单个元素例如:
public class arr{
public static void main(String[] args)
{
double[][] num={{10.0,99,99},{100,98,97},{100,100,99.5},{99.5,99,98.5}};
System.out.println("第二行第二列元素的值:"+num[1][1]);
System.out.println("第四行第一列元素的值:"+num[3][0]);
}
}
获取全部元素例如:
public class arr{
public static void main(String[] args)
{
int[][] num={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
//如果在进行输出的时候一定要使用双重循环
//外部的循环控制输出的行数,而内部的循环控制输出的列数
for (int i = 0; i < num.length; i++) {
for (int j = 0; j < num[i].length; j++) {
System.out.println("num["+i+"]["+j+"]="+num[i][j]);
}
}
}
}
3:多维数组
在Java中,多维数组的声明可以通过在数组类型后面添加多个方括号来实现。在Java中,多维数组是指包含一个或多个数组的数组。
// 三维数组的声明和初始化
int[][][] num = new int[3][4][5];