Java系列
第六章 数组
思维导图(回顾)
一、数组
数组是相同类型数据(基本数据类型或引用数据类型)的有序集合。其的长度是固定的,一经声明,无法更改。其中的每一个数据称作一个元素,有唯一对应的下标,及通过下标可以定位到与之对应的唯一一个元素,索引从0开始,一直到数组长度减一(length-1)。数组类型属于引用数据类型,数组是一个对象,数组中存储的数据为该数组的成员变量。
定义一个程度为4的int类型数组:
(1)静态初始化
int[] arr = {12,23,45};
int[] arr = new int[]{12,23,45};
(2)动态初始化
int[] arr;
arr = new int[4];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
若不赋值,会自动设置默认初始值。
数组的长度属性
System.out.println("数组的长度是:"+arr.length);//输出数组的changdu
二、遍历数组
(1)用普通for循环遍历数组:
for(int i=0; i<arr.length; i++){
System.out.println("第"+(i+1)+"个数为:"+arr[i]);
}
(2)用增强for循环遍历数组:
int count = 0;
for(int i:arr){
count++;
System.out.println("第"+count+"个数为:"+i);
}
相比于普通for循环,增强for循环更加简单,但是无法涉及引用相关的操作。
三、数组应用题
(1)最值问题
int[] arr = {12,3,7,4,8,125,9,45,666,36};
int maxNum = arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i]>maxNum){
maxNum = arr[i];
}
}
System.out.println("当前数组中最大的数为:"+maxNum);
(2)增加问题
int[] arr = {12,34,56,7,3,10,55,66,77,88,999,89};
int index = 1;//在第二个位置添一个数
for(int i=arr.length-1;i>=(index+1);i--){
arr[i] = arr[i-1];
}
arr[index] = 666;//{12,666,34,56,7,3,10,55,66,77,88,999,89}
(3)删除问题
删除特定位置的元素:
int[] arr = {12,34,56,7,3,10,34,45,56,7,666};
int index = 0;//删除第一个元素
for(int i=index;i<=arr.length-2;i++){
arr[i] = arr[i+1];
}
arr[arr.length-1] = 0;//{34,56,7,3,10,34,45,56,7,666,0}
删除特定内容的元素
int[] arr = {12,34,56,7,3,10,34,45,56,7,666};
//找到要删除的元素对应的索引即可:
int index = -1 ;
for(int i=0;i<arr.length;i++){
if(arr[i]==1200){//删除1200
index = i;
break;
}
}
//删除
if(index!=-1){
for(int i=index;i<=arr.length-2;i++){
arr[i] = arr[i+1];
}
arr[arr.length-1] = 0;
}else{//index==-1
System.out.println("根本没有你要删除的元素!");
}
四、Array工具类,System
通过Array工具类提供的属性和方法,我们可以方便的使用数组。
(1)toString
int[] arr = {1,3,7,2,4,8};
System.out.println(Arrays.toString(arr));//[1, 3, 7, 2, 4, 8]
(2)binarySearch:二分查找,在数组有序的基础上进行查找操作。
sort:排序数组
Arrays.sort(arr);//变为有序数组
System.out.println(Arrays.binarySearch(arr,4));//查找4,并返回坐标
(3)copyOf:完成数组的复制
int[] arr2 = {1,3,7,2,4,8};
int[] newArr = Arrays.copyOf(arr2,4);//[1, 3, 7, 2]
(4)copyOfRange:区间复制
int[] arr2 = {1,3,7,2,4,8};
int[] newArr2 = Arrays.copyOfRange(arr2,1,4);//[3, 7, 2]
(5)equals:比较两个数组的值是否一样
int[] arr3 = {1,3,7,2,4,8};
int[] arr4 = {1,3,7,2,4,8};
System.out.println(Arrays.equals(arr3,arr4));//true
System.out.println(arr3==arr4);//false
==比较的两个数组地址是否相同。
(6)fill:数组的填充
int[] arr5 = {1,3,7,2,4,8};
Arrays.fill(arr5,10);//[10, 10, 10, 10, 10, 10]
(6)System.arrayco:复制
int[] srcArr = {11,22,33,44,55,66,77,88};
int[] destArr = new int[10];
System.arraycopy(srcArr,1,destArr,3,4);//[0, 0, 0, 22, 33, 44, 55, 0, 0, 0]
(srcArr,1,destArr,3,4):从srcArr中第2个开始,复制到destArr中第4个位置开始的连续四个位置中去。
五、二维数组
二维数组中的每一个元素都是一个同类型的一维数组,且每个元素数组的长度可以不同。
1.二维数组初始化
(1)静态初始化
int[][] arr = {{1,2},{4,5,6},{4,5,6,7,8,9,9}};
int[][] arr =new int[][] {{1,2},{4,5,6},{4,5,6,7,8,9,9}};
(2)动态初始化
int[][] arr = new int[3][];
arr[0] = new int[]{1,2};
arr[1] = new int[]{3,4,5,6};
arr[2] = new int[]{34,45,56};
若各元素数组长度一致,则可以
int[][] arr = new int[3][2];
这样声明二维数组会分配默认初始值。
2.二维数组遍历
一维数组有for循环和增强for循环两种遍历方式,二维数组需要嵌套两层循环才能完成遍历,及四种方式。则外层增强for循环,内层for循环:
for(int[] a:arr){
for(int i=0; i<a,length; i++){
System.out.print(a[i]+"\t");
}
System.out.println();//换行
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了数组的基本概念和应用,下一节将会聊一聊面向对象的思想。