上期内容:
Java入门到精通(一)语言基础
Java入门到精通(二)流程控制
1.一维数组
以上是一维数组的结构。
(1)创建一维数组
int arr[];//数组中的每个元素都是int型
double[] arr;//数组中的每个元素都是double型
以上创建的数组没有初始化并不能访问元素,所以必须对数组初始化才能访问元素。
int a[] = {1,2,3};
int b[] = new int[] {1,2,3};
int c[] = new int[3];
c[0] = 1;
c[1] = 2;
c[2] = 3;
这里需要注意的是:java规定访问数组元素时最后一个元素的下标是a.length-1,第一个元素是从0开始的。
获取数组的长度arr.length。
2.二维数组
创建二维数组
int a[][];
a = new int[2][2];
int b[][];
b = new int[2][];//这里需要注意必须先行分配,列分配可以暂时省去
b[0] = new int[2];
b[1] = new int[2];
b = new int[][2];//这种创建方式是错误
使用foreach遍历二维数组:
public class hello {
public static void main(String[] args) {
//这里就是将二维数组拆分为arr.length个一维数组
int[][] arr = new int[][]{{1,2,3},{4,5,6}};
for (int[] x : arr){
for (int y : x){
System.out.print(y+" ");
}
System.out.println();
}
}
}
遍历非矩形的二维数组(也就是不规则)
int[][] arr = new int[][]{{1,2,3,4},{5,6},{7,8,9}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
打印结果 :/**
* 1 2 3 4
* 5 6
* 7 8 9
*/
(3).介绍一些对数组的操作
1.填充和批量替换数组元素
fill(int[] a, int value)
a 将要操作的数组名
value 要存储在数组的值
int[] arr = new int[5];
Arrays.fill(arr,1);
System.out.println(Arrays.toString(arr));
//打印结果 1 1 1 1 1
fill(int[] a,int fromIndex,int toIndex,int value)
fromIndex : 要使用指定值填充第一个元素的索引值(包括)
toIndex : 使用指定值填充的最后一个元素的索引值(不包括)
int[] arr = new int[]{1,2,3,4,5};
Arrays.fill(arr,1,3,8);
System.out.println(Arrays.toString(arr));
//打印结果[1, 8, 8, 4, 5]
打印数组的快捷方法:
- 打印一维数组Arrays.toString(int[] arr)。
打印二维数组Arrays.deepToString(int[] arr)
2.复制数组的几种方法
1.Arrays.copyOf(arr,newLength)
arr : 数组名
newLength : 指定复制后新数组的长度。
注意:如果新数组的长度大于数组长度大于原数组的长度,则0来填充。
int[] arr = new int[]{1,2,3};
int newArr[] = Arrays.copyOf(arr,5);
2.Arrays.copyOfRange(arr,fromIndex,toIndex)
fromIndex : 复制数组开始的位置(包括)
toIndex : 复制数组结束的位置(不包括)
int[] arr = new int[]{1,2,3,4,5,6};
int newArr[] = Arrays.copyOfRange(arr,1,3);
3.System 类的 arraycopy() 方法
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src :原始数组,要复制到目标数组的数组
srcPos :从原始数组的哪个位置开始复制
dest :目标数组,用来存储复制后的结果
destPos :复制的时候存放在目标数组中的初始位置
length :需要复制的元素的长度
public class hello {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5,6};
int[] des = new int[8];
System.arraycopy(arr,0,des,3,4);
System.out.println(Arrays.toString(des));
//打印结果:[0, 0, 0, 1, 2, 3, 4, 0]
}
}
Object 类的 clone() 方法
protected Object clone()
int[] arr = new int[]{1, 2, 3, 4, 5};
int[] des = arr.clone();//具体可以查看jdk文档
Arrays.binarySearch(arr, value)
value:要查找的数值
int[] arr = new int[]{1, 2, 3, 4, 5};
int value = Arrays.binarySearch(arr, 2);
int not = Arrays.binarySearch(arr,9);
System.out.println(value);//返回1
System.out.println(not);//返回-6
//进行源码追踪,具体的过程不一一列出
return mid; // key found
return -(low + 1); // key not found.
顺便提一下对数组进行排序方法
Arrays.sort(arr);//直接调用方法可以进行排序。
后期我会对十种排序方法整理(虽然我现在还有四种不会,但是我后面会学习进行对其整理)
不对的内容麻烦大佬纠正谢谢~
希望大家可以点个赞