Arrarys类中常用的方法-copyOf(),sort(),binarySearch(),equals(),fill();

java Arrays中定义了如下几种equals方法,用来对比判断数组是否相等

  1. equals(boolean[], boolean[])

  2. equals(byte[], boolean[])

  3. equals(char[], boolean[])

  4. equals(double[], boolean[])

  5. equals(float[], boolean[])

  6. equals(short[], boolean[])

  7. equals(int[], boolean[])

  8. equals(long[], boolean[])

  9. 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()输出的是数组的内容.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值