文章目录
简介
- 本文是2021/03/23晚上整理的笔记
- 赘述可能有点多,还请各位朋友耐心阅读
- 本文中Arrays工具类的方法的格式都是参照JDK API 1.8编写的
- 本人的内容和答案不一定是最好最正确的,欢迎各位朋友评论区指正改进
Arrays工具类常用的方法
Arrays工具类的介绍
Arrays工具类是数组工具类,位于java.util包下
使用前记得导包,如果使用的编译器有自动导包功能则可以忽略。
toString
- toString方法有多种重载形式,参数分别是不同数据类型的数组,本文仅以int[ ]数组来说明
- static String toString(int[ ] a)
- 将参数数组的内容以字符串形式返回。
- 代码示例:
int [] array = {
7,5,6,1,3};
System.out.println(Arrays.toString(array));
程序运行结果
[7,5,6,1,3]
fill两种重载形式
- 向数组中填充内容
- fill根据不同数据类型的数组有不同的重载形式,本文仅以int[ ]数组来说明
- (1)static void fill(int[] a, int val) :赋予参数数组每一个元素参数val的值
例如
int [] array = new int[5];
Arrays.fill(array,5);
System.out.println(Arrays.toString(array));
程序运行结果
[5,5,5,5,5]
- (2)static void fill(int[ ] a,int fromIndex,int toIndex,int val)
- 赋予参数数组指定范围内的元素 一定的值
- 范围从fromIndex开始,到toIndex前一个结束,范围取值是左闭右开区间:[fromIndex,toIndex)
- 代码示例:
int [] array = new int [5];
//注意左闭右开区间,范围实际到的是1到2,也就是数组第2个元素到第3个元素
Arrays.fill(array,1,3,5);
System.out.println(Arrays.toString(array));
程序运行结果
[0,5,5,0,0]
sort两种重载形式
- 对数组进行正序排序
- sort根据不同数据类型的数组有不同的重载形式,本文仅以int[ ]数组来说明
- (1)static void sort(int[ ] a):将参数数组按正序(从小到大)排序好
代码示例:
int [] array = {
7,8,6,5,4};
Arrays.sort(array);
//打印输出数组
System.out.println(Arrays.toString(array));
程序运行结果
[4,5,6,7,8]
- (2)static void sort(int[ ] a,int fromIndex,int toIndex)
- 将参数数组在一定范围内按正序(从小到大)排好,这个范围是左闭右开区间,[fromIndex,toIndex)
代码示例:
int [] array = {
7,8,5,4,3};
//注意左闭右开区间,范围实际到的是1到2,也就是数组第2个元素到第3个元素
Arrays.sort(array,1,3);
System.out.println(Arrays.toString(array));
程序运行结果
[7,5,8,4,3]
equals
- 比较两个数组的内容是否相同
- equals根据不同数据类型的数组有不同的重载形式,本文仅以int[ ]数组来说明
- static boolean equals(int[ ] a1,int [ ]a2 ):比较两个参数数组的内容是否相同,如果相同,返回true;如果不同,返回false
- 代码示例:
int [] arr1 = {
1,2,3,4,5};
int [] arr2 = {
1,2,3,4,5};
System.out.println(Arrays.equals(arr1,arr2));
程序运行结果
true
binarySearch两种重载形式
- 二分查找法
- 注意1:使用该方法的数组必须是一个正序数组,否则会出错
- 注意2:如果方法在数组中找不到参数的值,则会从-1开始对数组进行查找,最终返回一个参数可能存在的位置,注意这个返回的值是一个负数。
- (1)static int binarySearch(int[ ] a,int key):在参数数组中,找到key所在的索引值
- 代码示例:
int [] arr = {
10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr,30));
//由于数组中没有35,binarySearch方法将数组看成是索引-1开始-5结束的数组
//35可能存在的位置是30和40之间,返回一个大概值。结果为-4
System.out.println(Arrays.binarySearch(arr,35));
程序运行结果
2
-4
- (2)static int binarySearch(int[ ] a,int fromIndex,int toIndex,int key)
- 在数组的指定范围中查找key的值,返回索引。范围是左闭右开区间,[fromIndex,toIndex)
- 如果找不到key的值,就会返回负数
- 代码示例:
int [] arr = {
10,20,30,40,50};
//从索引1开始到索引2结束,也就是第2个数组元素到第3个数组元素
System.out.println(Arrays.binarySearch(arr,1,3,30));
//由于数组中没有35,binarySearch方法将数组看成是索引-1开始-5结束的数组
//35可能存在的位置是30和40之间,返回一个大概值。结果为-4
System.out.println(Arrays.binarySearch(arr,1,3,35));
2
-4
copyOf和copyOfRange
- 截取原数组,复制到新数组
- (1)static int[ ] copyOf(int[ ]original,int newLength)
- 截取原数组int[ ] original ,根据参数长度newLength截取,复制到新数组
- 代码示例:
int [] array = {
10,20,30,40,50};
int [] array2 = Arrays.copyOf(array,3);
System.out.println(Arrays.toString(array2));
程序运行结果
[10,20,30]
- (2) static int[ ] copyOfRange(int[ ] original,int from,int to)
- 截取原数组一定范围,复制到新数组。范围是左闭右开区间[from,to)
- 代码示例:
int [] array = {
10,20,30,40,50};
int [] array2 = Arrays.copyOfRange(array,2,4);
System.out.println(Arrays.toString(array2));
程序运行结果
[30,40]
拓展:自定义一个equals方法,达成和Arrays.equals方法一样的效果
public boolean equals(int [] array1,int [ ]array2){
//判断两个数组的地址值
if(array1 == array2){
return true;
}
//判断两个数组是否为空
if(array1==null || array2==null){
return false;
}
//判断两个数组的长度是否相等
int length = array1.length;
if(array2.length!=length){
return false;
}
//从第0号元素一直到最后一个,挨个比较两个数组的元素是否相等
for (int i = 0; i < array1.length; i++) {
if(array1[i] !=array2[i]){
return false;
}
}
return true;
}
IDEA常用快捷键
- psvm 快速生成main方法 psvm是public static void main的缩写
- sout 快速生成打印语句,System.out.println
- soutv 可以快速生成打印语句以及字符串
- Alt + 回车 对代码问题给出几种解决方案
- Alt + insert 快速生成构造方法 Getter Setter方法 重写父类方法等
- Ctrl + D复制单行
- iter可以快速生成增强for循环,iter是iteration的缩写
IDEA增加断点,使用Debug逐步查看程序运行步骤
- 点击代码左侧的一栏,增加断点;再次点击该断点,可以删除
- 出现了如图所示的红圆圈,表示断点添加成功
- 右键选择Debug
- 点击下方的控制台中的按键可以完成我们想要的动作
- 其中最左侧Step Over最常用。Step Over为不进入方法内部,一步一步查看程序运行。
- 点击一次Step Over 代码中发生了变化
- 再多点击几次,会发现i的值一点一点增加。
- 这个过程可以让我们完整的看到for循环运行的过程
- 其它按键:
Step Into 可以进入调用的方法内部,一步一步查看程序运行
Force Stp Into 强制进入方法内部
Step Out 从方法内部出来
Run to Cursor 使程序运行到鼠标的光标处
成员变量和局部变量的内存加载位置
- 成员变量是在堆空间或者静态域内
- 局部变量是在栈空间
设置IDEA,让IDEA自动生成serialVersionUID
点击左上角File-点击Settings-点击左侧一栏中的Editor-点击Editor下的Inspections-点击Java-点击Serialization issues-选择Seriallizable class without ‘serialVersionUID’,将右侧的对勾打上。