文章目录
- Java语言基础
- 一、数组的定义
- 1.1、什么是数组
- 1.2、创建数组
- 二、数组的初始化
- 三、数组的访问
- 四、数组的遍历
- 4.1、找最大值
- 4.2、找最小值
- 五、数组的复制
- 5.1、arraycopy
- 5.2、扩展:Arrays.copyOf
- 六、数组的排序
- 6.1、Arrays
- 6.1.1、Arrays.toString方法
- 6.1.2、Arrays.equals方法
- 6.1.3、Arrays.sort方法
- 6.1.4、Arrays.binarySearch方法
- 6.2、冒泡排序
- 七、引用类型数组
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