Arrays工具类和二维数组

一、数组的更多内容

1.1 Arrays工具类

JDK提供的java.util.Arrays工具类,包含了常用的数组操作,方便我们日常开发。Arrays类包含了:排序、查找、填充、打印内容等常见的操作。

  

注意1:Arrays.binarySearch(arr,elem );是二分查找,要求数组必须有序。

注意2:在JDK8增加parallelSort()方法,为并发排序方法,适合数据量大的情况。

注意3:JDK8后增加了函数式接口、lamda表达式,流式编程有关方法,暂时无法讲解。

1.2 数组拷贝

Arrays.copyOf()的底层使用了System类的arraycopy( )方法。

public static int[] copyOf(int[] original, int newLength) {
int[] copy = new int[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}

public static native void arraycopy(Object src, //源数组
int srcPos, //源数组要复制的起始位置
Object dest,//目的数组
int destPos,//目的数组要复制到的起始位置
int length); //要复制的数组元素的数量

 

 

之前的删除和添加操作可以使用System.arrayCopy()优化一下,提供效率。

//删除操作
System.arraycopy(scoreArr,index+1,scoreArr,index,scoreArr.length-1-index);
scoreArr[scoreArr.length-1] = 0;

Arrays.copyOf()和System.arrayCopy()的区别

  • Arrays.copyOf()需要一个新的数组,经常用于实现数组扩容。真正复制元素时使用的就是System.arrayCopy();
  • System.arrayCopy()是一个native方法(Java本身无法实现,需要调用C/C++代码实现),效率高。可以是两个数组的复制,也可以是一个数组的元素的复制

1.3 可变参数

JDK1.5提供了定义方法时使用可变参数的功能,语法为格式为:参数类型...参数,允许实参可以是0个、1个、n个,甚至数组的形式。可以进步的减少方法重载的数量。

 

 

总结1:可变参数关键点

  • 可变参数的好处:简单 方便 直观 减少方法重载的数量
  • 可变参数只能做方法的形参
  • 可变参数的实参可以是0个、1个、多个,也可以是一个数组
  • 一旦定义了可变参数,就不能定义数组参数了
  • 可变参数底层是一个数组,根据传递参数的个数不同,会创建出不同长度的数组,来存储这些参数传递的参数个数。在方法体中,可变参数就是通过数组来处理的
  • 一个方法的可变参数只能有一个,必须是最后一个参数

总结2:可变参数和数组参数的区别和联系

联系

可变参数底层是一个数组,在方法体中可变参数是当做数组来处理的;

方法的实参都可以是数组

区别

1.个数不同

一个方法的可变参数只能有一个;一个方法的数组参数可以有多个

2.位置不同

一个方法的可变参数只能是最后一个;一个方法的数组参数位置任意

3.实参不同

数组参数实参须是数组;可变参数实参可以是0个、1个、多个,一个数组

二、二维数组

2.1 定长二维数组

功能:存储3个班级分别4个学生的分数

思路1:定义一个数组,长度是12,存储12个分数

int [] scoreArr = new int[12];

不合理:一个班级12个学生

思路2:定义3个数组,长度都是4,分别存一个班的分数

int [] scoreArr = new int[4]

int [] scoreArr2 = new int[4]

int [] scoreArr3 = new int[4]

不合理:数组太多了

思路3:目标:数组少,能够区分3个班级

定义一个二维数组,一个数组就可以存储3个班分别四个学生的信息

 

注意:scoreArr.length是3不是12.scoreArr[0].length是4

2.2 不定长二维数组

功能:存储3个班级,每个班最多4个学生的分数

 

2.3 二维数组的遍历

2.3.1普通循环

2.3.2增强for循环

 

2.3.3Arrays工具类遍历

int[][]arr = {{10,20,30,40},{66,88},{100,200,300}};
System.out.println(Arrays.deepToString(arr));

总结1:有一维数组,有二维数组,就有三维数组,四维数组.....

  • 一维数组:存储一个班10个学生的分数
  • 二维数组:存储5个班各10个学生的分数
  • 三维数组:存储6个年级个5个班各10个学生的分数
  • 四维数组:存储10个学校6个年级个5个班各10个学生的分数

 

总结2:其实只要一维数组,没有二维数组,三维数组

  • int [] scoreArr = new int[10] 定义一个一维数组,长度是10,元素是int类型
  • int [][] scoreArr = new int[5][10] 定义一个一维数组,长度是5,每个元素是一个一维数组
  • int [][][] scoreArr = new int[3][5][10] 定义一个一维数组,长度是3,每个元素是一个二维数组

总结3:二维数组的静态初始化

  • int [] [] scoreArr = new int[][]{{90,100,90,100},{89,89,0},{100,0}};
  • int [] [] scoreArr = {{90,100,90,100},{89,89,0},{100,0}};

总结4:实际开发中多维数组用的非常少

有帮助到你的点赞、收藏和关注一下吧

                                                                       需要更多教程,微信扫码即可

                                                                                 

                                                                                         👆👆👆

                                                        别忘了扫码领资料哦【高清Java学习路线图】

                                                                     和【全套学习视频及配套资料】
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值