zoukankan      html  css  js  c++  java
  • 012java中两个数组的比较、填充、查找、复制

    原文地址:http://c.biancheng.net/view/919.html

    (一)java中两个数组的比较

    相等的条件:

    1. 元素个数相等;
    2. 对应位置对应的元素也相等

    比较方法:equals(arrayA, arrayB)

    arrayA 是用于比较的第一个数组,arrayB 是用于比较的第二个数组

    Arrays.equals(arrayA, arrayB);

    例1:定义 3 个数组,分别为 score1、score2 和 score3。第一个数组直接给出了数组的值;第二个数组先定义数组的长度,然后为每个元素赋值;第三个数组中的元素和第一个数组中的元素相同,但是顺序不同。分别将 score1 数组与 score2 和 score3 数组进行比较,并输出比较的结果。

    public static void main(String[] args) {
        double[] score1 = { 99, 100, 98.5, 96.5, 72 };
        double[] score2 = new double[5];
        score2[0] = 99;
        score2[1] = 100;
        score2[2] = 98.5;
        score2[3] = 96.5;
        score2[4] = 72;
        double[] score3 = { 99, 96.5, 98.5, 100, 72 };
        if (Arrays.equals(score1, score2)) {
            System.out.println("score1 数组和 score2 数组相等");
        } else {
            System.out.println("score1 数组和 score2 数组不等");
        }
        if (Arrays.equals(score1, score3)) {
            System.out.println("score1 数组和 score3 数组相等");
        } else {
            System.out.println("score1 数组和 score3 数组不等");
        }
    }

    运行输出结果如下:

    score1 数组和 score2 数组相等
    score1 数组和 score3 数组不等


    (二)java中数组的填充fill()
    java中 使用fill() 方法可以在指定位置进行数值填充,但只能使用同一个数值进行填充

    Arrays.fill(array,value);

    例1:声明一个 int 类型的 number 数组,然后通过 for 语句进行遍历,在该语句中调用 Arrays 类的 fill() 方法来填充数组,并输出数组中元素的值。

    
    
    public static void main(String[] args) {
        int[] number = new int[5];
        System.out.println("number —共有 " + number.length + " 个元素,它们分别是:");
        for (int i = 0; i < number.length; i++) {
            Arrays.fill(number, i);
            System.out.println("number[" + i + "]=" + i);
        }
    }
    
    

    执行上述代码,输出结果如下所示。

    number 一共有 5 个元素,它们分别是:
    number[0]=0
    number[1]=1
    number[2]=2
    number[3]=3
    number[4]=4
    
    
    (三)java中数组的查找指定元素binarySearch()
    查找数组是指从数组中查询指定位置的元素,或者查询某元素在指定数组中的位置。
    binarySearch() 方法可以实现数组的查找,该方法可使用二分搜索法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。
    binarySearch() 方法有多种重载形式来满足不同类型数组的查找需要,常用的重载形式有两种。
    (1) 第一种形式如下:a 表示要搜索的数组,key 表示要搜索的值。如果 key 包含在数组中,则返回搜索值的索引;否则返回 -1 或“-插入点”。
    插入点指搜索键将要插入数组的位置,即第一个大于此键的元素索引。
    binarySearch(Object[] a,Object key);
    
    

    例1:声明 double 类型的 score 数组,接着调用 Arrays 类的 sort() 方法对 score 数组排序,排序后分别查找数组中值为 100 和 60 的元素,分别将结果保存到 index1 和 index2 变量中,最后输出变量的值。代码如下:

    
    
    public static void main(String[] args) {
        double[] score = { 99.5, 100, 98, 97.5, 100, 95, 85.5, 100 };
        Arrays.sort(score);
        int index1 = Arrays.binarySearch(score, 100);
        int index2 = Arrays.binarySearch(score, 60);
        System.out.println("查找到 100 的位置是:" + index1);
        System.out.println("查找到 60 的位置是:" + index2);
    }
    执行上述代码,输出结果如下:
    查找到 100 的位置是:5
    查找到 60 的位置是:-1

    (2) 除了上述形式外,binarySearch() 还有另一种常用的形式,这种形式用于在指定的范围内查找某一元素。语法如下:
    binarySearch(Object[] a,int fromIndex,int toIndex,Object key);
    其中,a表示要进行查找的数组,fromIndex 指定范围的开始处索引(包含开始处),toIndex 指定范围的结束处索引(不包含结束处),key 表示要搜索的元素。

    在使用 binarySearch()方法的上述重载形式时,也需要对数组进行排序,以便获取准确的索引值。如果要查找的元素 key 在指定的范围内,则返回搜索键的索引;否则返回 -1 或 “-插入点”。插入点指要将键插入数组的位置,即范围内第一个大于此键的元素索引。

    例 2 :对例 1 中创建的 score 数组进行查找元素,指定开始位置为 2,结束位置为 6。代码如下:

    public static void main(String[] args) {
        double[] score = {99.5,100,98,97.5,100,95,85.5,100};
        Arrays.sort(score);
        int index1 = Arrays.binarySearch(score,2,6,100);
        int index2 = Arrays.binarySearch(score,2,6,60);
        System.out.println("查找到 100 的位置是:"+index1);
        System.out.println("查找到 60 的位置是:"+ index2);
    }

    执行上述代码,输出结果如下:

    查找到 100 的位置是:5
    查找到 60 的位置是:-3
    注意:实现对数组进行查找的方法很多,但是使用 Arrays 对象的 binarySearch() 方法是最简单、最方便的一种,因此该方法经常被应用。
    (四)java中数组的复制arraycopy()方法、clone() 方法、copyOf()和copyOfRan
    概念:复制数组,是指将一个数组中的元素在另一个数组中进行复制。
    在 Java 中实现数组复制分别有以下 4 种方法:
    1. Arrays 类的 copyOf() 方法
    2. Arrays 类的 copyOfRange() 方法
    3. System 类的 arraycopy() 方法
    4. Object 类的 clone() 方法
    copyOf() 方法是复制数组至指定长度,copyOfRange() 方法则将指定数组的指定长度复制到一个新数组中
    
    
    1. 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 个空余的元素供后期开发使用。

    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]+"	");
            }
            // 定义一个新的数组,将 scores 数组中的 5 个元素复制过来
            // 同时留 3 个内存空间供以后开发使用
            int[] newScores = (int[])Arrays.copyOf(scores,8);
            System.out.println("
    复制的新数组内容如下:");
            // 循环遍历复制后的新数组
            for(int j=0;j<newScores.length;j++) {
                // 将新数组的元素输出
                System.out.print(newScores[j]+"	");
            }
        }
    }

    因为原数组 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. Arrays 类的 copyOfRange() 方法
    语法:
    • srcArray 表示原数组。
    • startIndex 表示开始复制的起始索引,目标数组中将包含起始索引对应的元素,另外,startIndex 必须在 0 到 srcArray.length 之间。
    • endIndex 表示终止索引,目标数组中将不包含终止索引对应的元素,endIndex 必须大于等于 startIndex,可以大于 srcArray.length,如果大于 srcArray.length,则目标数组中使用默认值填充。
    • 注意:目标数组如果已经存在,将会被重构。
    Arrays.copyOfRange(dataType[] srcArray,int startIndex,int endIndex)

    3.  System 类的 arraycopy() 方法

    语法
    System.arraycopy(dataType[] srcArray,int srcIndex,int destArray,int destIndex,int length)
    
    
    srcArray 表示原数组;
    srcIndex 表示原数组中的起始索引;
    destArray 表示目标数组;
    destIndex 表示目标数组中的起始索引;
    length 表示要复制的数组长度。

    使用此方法复制数组时,length+srcIndex 必须小于等于 srcArray.length,
    同时 length+destIndex 必须小于等于 destArray.length。

    注意:目标数组必须已经存在,且不会被重构,相当于替换目标数组中的部分元素。
    4.使用 clone() 方法
    clone() 方法也可以实现复制数组。该方法是类 Object 中的方法,可以创建一个有单独内存空间的对象。
    因为数组也是一个 Object 类,因此也可以使用数组对象的 clone() 方法来复制数组。

    clone() 方法的返回值是 Object 类型,要使用强制类型转换为适当的类型。
    语法:
    array_name.clone()
    
    

    示例语句如下:

    int[] targetArray=(int[])sourceArray.clone();

    注意:目标数组如果已经存在,将会被重构。

    本文来自博客园,作者:Jaoany,转载请注明原文链接:https://www.cnblogs.com/fanglijiao/p/15458827.html

  • 相关阅读:
    关于Hyper-V备份的四大注意事项
    未找到导入的项目,请确认 <Import> 声明中的路径正确
    IDC门外汉-单线、双线、智能多线、BGP的区别
    国内主流云主机比较
    Error : The specified component was not reported by the VSS writer (Error 517) in Windows Server 2012 Backup
    [MSDN] Windows Server 2012 R2 简/繁/英下载
    深入浅出VC++串口编程之基于Win32 API
    Remon Spekreijse CSerialPort串口类的修正版2014-01-10
    Remon Spekreijse CSerialPort用法
    “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)
  • 原文地址:https://www.cnblogs.com/fanglijiao/p/15458827.html
Copyright © 2011-2022 走看看