Java知识点(四):数组的定义、数组的初始化、数组的访问、数组的遍历、数组的复制、数组的排序、引用类型数组


Java语言基础

包含什么是数组、创建数组、数组的初始化、数组的访问、数组的遍历(找最大值、找最小值)、arraycopy、Arrays.copyOf、Arrays.toString方法、Arrays.equals方法、Arrays.sort方法、Arrays.binarySearch方法、冒泡排序、引用类型数组。


一、数组的定义

1.1、什么是数组

相同数据类型的元素组成的集合,数组是一种数据类型(引用类型)。元素按线性顺序排序。所谓线性就是除第一个元素外,每个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素(一个跟一个)

数组

1.2、创建数组

package day01;

public class Test {
	public static void main(String[] args) {
		
		// int[]:数组的类型,表示数组中的每一个元素都是int类型
		// arr:数组类型变量(引用)
		// int[4]:数组的长度,即数组中的元素个数
		int[] arr = new int[4];
	}

}

二、数组的初始化

基本类型的数组(数组元素为基本类型)创建后,其元素的初始值:byte,short,char,int,long为0;float和double为0.0;boolean为false

1)数组声明的同时进行初始化

package day01;

public class Test {
	public static void main(String[] args) {
		int[] arr = {1,4,7};  // 1,4,7
		
//		int[] arr;
//		arr = {1,2,3};  // 编译错误,此方式只能声明的同时初始化

//		int[] a = new int[9] {1,4,7,2};  // 编译错误;Cannot define dimension expressions when an array initializer is provided
	}

}

2)声明后,再初始化

package day01;

public class Test {
	public static void main(String[] args) {
		int[] arr = new int[3];  // 0,0,0
		
		int[] arr01 = new int[]{1,2,3};  // 1,2,3
		
		int[] arr02 = new int[3];
		arr02 = new int[]{1,2,3};  // 正确
	}

}

三、数组的访问

1)通过数组名.length可以获取数组的长度

package day01;

public class Test {
	public static void main(String[] args) {
		int[] arr = new int[3];
		
		System.out.println(arr.length);  // 3
	}

}

在这里插入图片描述

2)通过索引/下标来访问数组中的元素。需要注意:数组的下标从0开始,最大到 length-1

package day01;

public class Test {
	public static void main(String[] args) {
		int[] arr = new int[3];
		arr[0] = 100;  // 给第1个元素赋值为100
		arr[1] = 200;  // 给第2个元素赋值为200
		arr[2] = 300;
//		arr[3] = 400;  // 数组下标越界异常;ArrayIndexOutOfBoundsException
		
		System.out.println("数组的第length-1个元素为: "+arr[arr.length-1]);  // length-1:获取arr的长度/个数
	}

}

在这里插入图片描述

四、数组的遍历

package day01;

public class Test {
	public static void main(String[] args) {
		
		int[] arr = new int[10];  // 创建一个数组,元素个数为10
		
		for(int i=0;i<arr.length;i++){  // 遍历数组,给数组每个元素赋值
		    arr[i] = i;
		}
		
		for(int i=0;i<arr.length;i++){  // 正序
		    System.out.print(arr[i]+" ");
		}
		System.out.println();
		
		for(int i=arr.length-1;i>=0;i--){  // 倒序
		    System.out.print(arr[i]+" ");
		}
	}

}

在这里插入图片描述

4.1、找最大值

1)假设第1个元素为最大值

int max = arr[0];

2)遍历剩余元素,将剩余元素与max做对比,若剩余元素大于max,修改max为较大的数

package day01;

public class Test {
	public static void main(String[] args) {
		
		int[] arr = new int[] {5,1,3,2,4,6,8,7};
		
		int max = arr[0];  // 假设第一个元素为最大值
		for(int i=1;i<arr.length;i++){
		    if(arr[i]>max){  // 判断,如果第i个元素大于max,则将max赋值为第i个元素
		        max = arr[i];
		    }
		}
		
		System.out.println("数组最大值为: "+max);
	}

}

在这里插入图片描述

4.2、找最小值

1)假设第1个元素为最小值

int min = arr[0];

2)遍历剩余元素,将剩余元素与max做对比,若剩余元素小于min,修改min为较小的数

package day01;

public class Test {
	public static void main(String[] args) {
		
		int[] arr = new int[] {5,1,3,2,4,6,8,7};
		
		int min = arr[0];  // 假设第一个元素为最小值
		for(int i=1;i<arr.length;i++){  // 判断,如果第i个元素小于min,则将min赋值为第i个元素
		    if(arr[i]<min){
		        min = arr[i];
		    }
		}
		
		System.out.println("数组最小值为: "+min);
	}

}

在这里插入图片描述

五、数组的复制

5.1、arraycopy

JDK提供对数组进行复制的方法,即将一个数组(源数组)中各个元素值复制到另外一个数组(目标数组)中

System.arraycopy(src, srcPos, dest, destPos, length);
System.arraycopy(a,1,a1,0,4);
//src-----要复制的源数组
//srcPos-----从源数组复制的起始位置
//dest-----要复制到的目标数组
//destPos-----复制到目标数组中的起始位置
//length-----要复制的元素个数
package day01;

public class Test {
	public static void main(String[] args) {
		
		int[] arr1 = new int[] {1,4,7,2,3,7,1};
		int[] arr2 = new int[4];

		// src:要复制的源数组arr1
		// srcPos:从下标为1的元素开始
		// dest:要复制到的目标数组arr2
		// destPos:复制到目标数组中的起始位置0
		// length:复制4个元素
		System.arraycopy(arr1,1,arr2,0,4);
		
		for(int i = 0; i < arr2.length; i++) {
			System.out.print(arr2[i]+" ");
		}
	}

}

在这里插入图片描述

5.2、扩展:Arrays.copyOf

Arrays.copyOf方法:简便实现数组扩展,数组的长度在创建后不可改变。所谓扩展是指创建一个更长的数组并将源数组的内容复制过去

package day01;

import java.util.Arrays;  // 使用Arrays需导包:java.util.Arrays

public class Test {
	public static void main(String[] args) {
		int[] arr = {13,32,33,45,95,16};
		
		// arr:需要拷贝的原始数组
		// arr.length+1:要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值,如int型则补充0
		// Arrays.copyOf()方法返回的数组是新的数组对象,改变传回数组中的元素值,不会影响原来的数组
		arr = Arrays.copyOf(arr, arr.length+1);
		
		// Arrays.toString():打印数组内容;将数组转换成String类型输出,入参可以是long、float、double、int、boolean、byte、object类型的数组
		System.out.println(Arrays.toString(arr));  // 扩展为7个元素,最后一个元素初始值为0,结果为[13, 32, 33, 45, 95, 16, 0]
	}

}

在这里插入图片描述

六、数组的排序

6.1、Arrays

JDK中的java.util.Arrays类提供对数组操作的一系列使用方法

6.1.1、Arrays.toString方法

Arrays.toString方法:用于字符串表示数组的元素

package day01;

import java.util.Arrays;  // 使用Arrays需导包:java.util.Arrays

public class Test {
	public static void main(String[] args) {
		int[] arr1 = {1,2,3,4,5,6};
		
		System.out.println(Arrays.toString(arr1));  // 结果为[1, 2, 3, 4, 5, 6]
	}

}

在这里插入图片描述

6.1.2、Arrays.equals方法

Arrays.equals方法:用于比较两个数组的各个元素是否相等

package day01;

import java.util.Arrays;  // 使用Arrays需导包:java.util.Arrays

public class Test {
	public static void main(String[] args) {
		int[] arr1 = {1,2,3,4,5,6};
		int[] arr2 = {1,2,3,4,5,6};
		
		System.out.println(Arrays.equals(arr1, arr2));  // 结果为true
	}

}

在这里插入图片描述

6.1.3、Arrays.sort方法

Arrays.sort方法:用于实现数组的排序

package day01;

import java.util.Arrays;  // 使用Arrays需导包:java.util.Arrays

public class Test {
	public static void main(String[] args) {
		int[] arr = {13,32,33,45,95,16};
		String[] str = {"Apple","Pear","Banana","Strawbeery","Cherry","Fruit"};
		
		Arrays.sort(arr);
		Arrays.sort(str);
		
		System.out.println(Arrays.toString(arr));  // 按照数组大小顺序排序,结果为[13, 16, 32, 33, 45, 95]
		System.out.println(Arrays.toString(str));  // 按照字母顺序排序,结果为[Apple, Banana, Cherry, Fruit, Pear, Strawbeery]
	}

}

在这里插入图片描述

6.1.4、Arrays.binarySearch方法

Arrays.binarySearch方法:用于实现有序数组的二分法查找

package day01;

import java.util.Arrays;  // 使用Arrays需导包:java.util.Arrays

public class Test {
	public static void main(String[] args) {
		int[] arr = {13,32,33,45,95,16,13};
		Arrays.sort(arr);  // [13, 13, 16, 32, 33, 45, 95]
		
		int index = Arrays.binarySearch(arr, 33);  // 返回数组下标
		System.out.println("元素为33的下标是: "+index);  // 结果为4
		
		index = Arrays.binarySearch(arr, 0);
		System.out.println("元素为0的下标是: "+index);  // 找不到时,返回一个负数,结果为-1
		
		index = Arrays.binarySearch(arr, 13);
		System.out.println("元素为13的下标是: "+index);  // 有多个相等元素是随机返回其中一个值的下标
	}

}

在这里插入图片描述

6.2、冒泡排序

冒泡的工作原理:

1)4个数冒三轮

2)每一轮都是从第1个元素开始冒,每一次都是和它的下一个元素比

3)冒出来的数就不用管了

经典案例:数组的冒泡排序

七、引用类型数组

1)声明int型数组arr,包含3个元素,每个元素都是int型,默认值为0

package day01;

import java.util.Arrays;  // 使用Arrays需导包:java.util.Arrays

public class Test {
	public static void main(String[] args) {
		int[] arr = new int[3];
		arr[0] = 2;
		arr[1] = 3;
		arr[2] = 5;
	}

}

在这里插入图片描述

2)声明Aoo型数组aoo,包含4个元素,每个元素都是Aoo型,默认值为null

Aoo[] aoo = new Aoo[4]; //创建Aoo数组对象
aoo[0] =new Aoo(2,5); //创建Aoo对象
aoo[1] =new Aoo(3,6);
aoo[2] =new Aoo(4,7);

在这里插入图片描述

Cell[] cells = new Cell[] {new Cell(2,5),new Cell(3,6),new Cell(4,7),new Cell(5,8)};

3)声明int[]型数组arr,包含3个元素,每个元素都是int[]型,默认值为null

//二维数组
int[][] arr = new int[3][]; //arr指向一个数组,该数组有是三个元素,都是int类型数组,长度分别为2,3,2
arr[0] = new int[2];
arr[0] = new int[3];
arr[0] = new int[2];
arr[1][0] = 5; //给arr中第二个元素的第一个元素赋值为5

在这里插入图片描述


  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹿快跑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值