Java系列(6)

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();//换行
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了数组的基本概念和应用,下一节将会聊一聊面向对象的思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值