java Arrays中定义了如下几种equals方法,用来对比判断数组是否相等
-
equals(boolean[], boolean[])
-
equals(byte[], boolean[])
-
equals(char[], boolean[])
-
equals(double[], boolean[])
-
equals(float[], boolean[])
-
equals(short[], boolean[])
-
equals(int[], boolean[])
-
equals(long[], boolean[])
-
equals(Object[], boolean[])
代码很简单,若两个数组的长度相等,且每一个位置的元素也相等,则认为这两个数组相等
bianrySearch(object a[],int b)采用二分法在数组a中查找b的位置
前提条件必须是排序过的数组
好了,到这里已经差不多可以总结了,有同学可能会说:“老师,这没有规律的一些返回值,怎么总结?”别着急,我们挨个来看!
分析1:查找“2”时,显然集合中没有“2”,所以必然找不到,但是返回值-2又改怎么解释呢?大家注意看,2如果有的话,应该在哪个位置?是不是在3的位置(排序后),大于1小于3,那3所在的位置和“-2”有何关联吗?当你把整个集合的下标设成从1开始,3所在的位置即2,因为没有“2”这个元素,所以返回值就是“-2”。
分析2:查找“8”时,集合中是存在的,返回值是4,大家把现在“8”的位置和返回值4进行关联,总结一下是什么?那就是,当集合中存在该数时,下标是从0开始的,并且值是正数。
分析3:带着分析1的结论,我们来验证一下查找“4”。集合中是不存在4的,那如果有的话,“4”应该在6的位置,那下标从1开始,“6”所在的位置就是3,又因为集合中没有,所以是负数!
fill()
public static void fill(int[] a, form, to, int var)
1.概念:
可以为数组元素填充相同的值。
2.参数:
a:数组
form:替换开始位置(包括)
to:替换结束位置(不包括)
var:要替换的值
3.实例:
String[] a9 = new String[6]; Arrays.fill(a9, "Hello"); Arrays.fill(a9, 3, 5,"World");
结果:
a9[] = {Hello,Hello,Hello,World,World,Hello};
使用 copyOf() 方法
Arrays 类的copyOf() 方法是复制数组至指定长度。
1. 使用 copyOf() 方法对数组进行复制
Arrays 类的 copyOf() 方法的语法格式如下:
Arrays.copyOf(dataType[] srcArray,int length);
其中,srcArray 表示要进行复制的数组,length 表示复制后的新数组的长度。
使用这种方法复制数组时,默认从原数组的第一个元素(索引值为 0)开始复制,目标数组的长度将为 length。如果 length 大于 srcArray.length,则目标数组中采用默认值填充;如果 length 小于 srcArray.length,则复制到第 length 个元素(索引值为 length-1)即止。
注意:目标数组如果已经存在,将会被重构。
例 1
假设有一个数组中保存了 5 个成绩,现在需要在一个新数组中保存这 5 个成绩,同时留 3 个空余的元素供后期开发使用。
使用 Arrays 类的 CopyOf() 方法完成数组复制的代码如下:
import java.util.Arrays;public class Test19{
public static void main(String[] args) { // 定义长度为 5 的数组
int scores[] = new int[]{57,81,68,75,91}; // 输出原数组
System.out.println("原数组内容如下:"); // 循环遍历原数组
for(int i=0;i<scores.length;i++) { // 将数组元素输出
System.out.print(scores[i]+"\t");
} // 定义一个新的数组,将 scores 数组中的 5 个元素复制过来
// 同时留 3 个内存空间供以后开发使用
int[] newScores = (int[])Arrays.copyOf(scores,8);
System.out.println("\n复制的新数组内容如下:"); // 循环遍历复制后的新数组
for(int j=0;j<newScores.length;j++) { // 将新数组的元素输出
System.out.print(newScores[j]+"\t");
}
}
}
在上述代码中,由于原数组 scores 的长度为 5,而要复制的新数组 newScores 的长度为 8,因此在将原数组中的 5 个元素复制完之后,会采用默认值填充剩余 3 个元素的内容。
因为原数组 scores 的数据类型为 int,而使用 Arrays.copyOf(scores,8) 方法复制数组之后返回的是 Object[] 类型,因此需要将 Object[] 数据类型强制转换为 int[] 类型。同时,也正因为 scores 的数据类型为 int,因此默认值为 0。
运行的结果如下所示。
原数组内容如下: 57 81 68 75 91 复制的新数组内容如下: 57 81 68 75 91 0 0 0
2. 使用 CopyOfRange() 方法对数组进行复制
Arrays 类的 CopyOfRange() 方法是另一种复制数组的方法,其语法形式如下:
Arrays.copyOfRange(dataType[] srcArray,int startIndex,int endIndex)
其中:
-
srcArray 表示原数组。
-
startIndex 表示开始复制的起始索引,目标数组中将包含起始索引对应的元素,另外,startIndex 必须在 0 到 srcArray.length 之间。
-
endIndex 表示终止索引,目标数组中将不包含终止索引对应的元素,endIndex 必须大于等于 startIndex,可以大于 srcArray.length,如果大于 srcArray.length,则目标数组中使用默认值填充。
注意:目标数组如果已经存在,将会被重构。
例 2
假设有一个名称为 scores 的数组其元素为 8 个,现在需要定义一个名称为 newScores 的新数组。新数组的元素为 scores 数组的前 5 个元素,并且顺序不变。
使用 Arrays 类 copyOfRange() 方法完成数组复制的代码如下:
public class Test20 {
public static void main(String[] args) { // 定义长度为8的数组
int scores[] = new int[] { 57, 81, 68, 75, 91, 66, 75, 84 };
System.out.println("原数组内容如下:"); // 循环遍历原数组
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "\t");
} // 复制原数组的前5个元素到newScores数组中
int newScores[] = (int[]) Arrays.copyOfRange(scores, 0, 5);
System.out.println("\n复制的新数组内容如下:"); // 循环遍历目标数组,即复制后的新数组
for (int j = 0; j < newScores.length; j++) {
System.out.print(newScores[j] + "\t");
}
}
}
在上述代码中,原数组 scores 中包含有 8 个元素,使用 Arrays.copyOfRange() 方法可以将该数组复制到长度为 5 的 newScores 数组中,截取 scores 数组的前 5 个元素即可。
该程序运行结果如下所示。
原数组内容如下: 57 81 68 75 91 66 75 84 复制的新数组内容如下: 57 81 68 75 91
一个数组直接使用toString()方法输出的是数组的地址 Arrays.toString()输出的是数组的内容.