ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

012java中两个数组的比较、填充、查找、复制

2021-10-27 18:02:15  阅读:172  来源: 互联网

标签:填充 int Arrays length 查找 数组 100 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]+"\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 的数据类型为 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();

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

标签:填充,int,Arrays,length,查找,数组,100,012java
来源: https://www.cnblogs.com/fanglijiao/p/15458827.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有