Java中数组操作 java.util.Arrays 类常用方法的使用

任何一门编程语言,数组都是最重要和常用的数据结构之一,但不同的语言对数组的构造与处理是不尽相同的。

Java中提供了java.util.Arrays 类能方便地操作数组,并且它提供的所有方法都是静态的。下面介绍一下Arrays类最常用的几个方法。

1.  数组排序

Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能。

2.  数组转换为字符串

Arrays提供了一个toString方法,可以直接把一个数组转换为字符串,这样可以方便观察数组里的元素。

//来源:公众号【时光与字节】
//数组排序与转换为字符串
package BaseCode;
import java.util.Arrays;
public class j4_1028_11 {
    public static void main(String[] args) {
        int[] ff= {11,3,25,71,9};
        System.out.print("数组ff未排序: ");
        for(int n:ff)
            System.out.print(n+"  ");
        Arrays.sort(ff); // 对数组进行排序
        System.out.printf("\n数组ff排序后: ");
        for(int n:ff)
            System.out.print(n+"  ");
        //将数组转换为字符串
        System.out.printf("\n数组ff转为字符串: "+Arrays.toString(ff));
    }
}

运行结果

数组ff未排序:11  3  25  71  9
数组ff排序后:3  9  11  25  71
数组ff转为字符串:[3, 9, 11, 25, 71]

3.  数组元素的填充与替换

Arrays提供了fill方法对数组(或数组指定位置)填充或替换为指定的值。

4.  判断数组是否相同

Arrays.equals可以比较两个数组中的元素是否一样。

//来源:【时光与字节】
//fill方法和equals方法
package BaseCode;
import java.util.Arrays;
public class j4_1028_12 {
    public static void main(String[] args) {
        int[] ff= new int[5];
        Arrays.fill(ff, 5);
        System.out.print("数组全部元素填充为5: ");
        for(int n:ff)
            System.out.print(n+"  ");
        //将数组从第1个元素至第3个元素填充为7
        //含第1个元素,不含第3个元素
        Arrays.fill(ff,1,3,7);
        System.out.print("\n数组指定位置填充为7: ");
        for(int n:ff)
            System.out.print(n+"  ");
        int[] nn= new int[5];
        Arrays.fill(nn, 5);
        System.out.printf("\nff与nn相同:"+Arrays.equals(ff, nn));
    }
}

运行结果

数组全部元素填充为5:5  5  5  5  5
数组指定位置填充为7:5  7  7  5  5
ff与nn相同:false

5.  复制数组

Arrays类的copyOf()方法和copyRange()方法可以实现对数组的复制。

copyOf(arr, int newlength)

参数newlength为新数组的长度,即从数组arr的第0个位置开始,直到newlength结束,如果newlength大于arr的长度,后面按默认值填充。

copyOfRange(arr, int formIndex, int toIndex)

参数formIndex为从数组arr中取元素的开始位置,toIndex为结束位置,但不包括该位置的元素,如toIndex超出arr的长度,后面按默认值填充。

//来源:公众号【时光与字节】
//数组的复制,copyOf与copyOfRange的使用
package BaseCode;
import java.util.Arrays;
public class j4_1028_10 {
    public static void main(String[] args) {
        int[] ff= {1,3,5,7,9};
        //Arrays.copyOf复制数组至指定长度,从0开始
        int[] newff1=Arrays.copyOf(ff, 3);
        int[] newff2=Arrays.copyOf(ff, 6);
        System.out.print("copyOf的使用:\n数组newff1: ");
        for(int n:newff1)
            System.out.print(n+"  ");
        System.out.printf("\n数组newff2: ");
        for(int n:newff2)
            System.out.print(n+"  ");
        //Arrays.copyOfRange第二个参数为开始位置
        //第三个参数为结束位置
        int[] newff3=Arrays.copyOfRange(ff, 1, 4);
        int[] newff4=Arrays.copyOfRange(ff, 1, 7);
        System.out.printf("\ncopyOfRange的使用:\n数组newff3: ");
        for(int n:newff3)
            System.out.print(n+"  ");
        System.out.printf("\n数组newff4: ");
        for(int n:newff4)
            System.out.print(n+"  ");
    }
}

运行结果

copyOf的使用:
数组newff1:1  3  5
数组newff2:1  3  5  7  9  0
copyOfRange的使用:
数组newff3:3  5  7
数组newff4:3  5  7  9  0  0

6.  元素查询

Arrays类的binarySearch 方法可以查询元素出现的位置,返回元素的索引。但是注意,使用binarySearch进行查找之前,必须使用sort进行排序。并且如果数组中有多个相同的元素,查找结果是不确定的。

binarySearch(arr, object key)

如果key在数组中,则返回搜索值的索引;否则返回-1或者负的插入点值。

所谓插入点值就是第一个比key大的元素在数组中的索引,而且这个索引是从1开始的。

binarySearch(arr, int fromIndex, int endIndex, object key);

fromIndex:指定范围的开始处索引(包含

toIndex:指定范围的结束处索引(不包含

其搜索结果可分为以下四种情况:

  1. 该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1);
  2. 该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1);
  3. 该搜索键在范围内,但不是数组元素,由1开始计数,返回负的插入点索引值;
  4. 该搜索键在范围内,且是数组元素,由0开始计数,返回搜索值的索引值;

参看下面的示例代码及注释

//来源:公众号【时光与字节】
//查找数组元素:binarySearch 方法的使用
package BaseCode;
import java.util.Arrays;
public class j4_1028_13 {
    public static void main(String[] args) {
        int[] fn= {1,3,5,7,9};
        Arrays.sort(fn);//查找前先排序
        int cx1=Arrays.binarySearch(fn,5);//返回2 ,找到了关键字,索引从0开始
        //未找到6,返回的是负的插入点值,
        //6在数组中的插入点是元素7的索引,
        //元素7的索引从1开始算就是4,所有返回-4
        int cx2=Arrays.binarySearch(fn,6);//未找到,返回-4,插入点7的索引是4
        int cx3=Arrays.binarySearch(fn,4);//未找到,返回-3,插入点5的索引是3
        System.out.println("不指定查找范围示例:");
        System.out.println("数组fn的内容:"+Arrays.toString(fn));
        System.out.printf("[5]找到:cx1=%d%n", cx1);
        System.out.printf("[6][4]未找到:cx2=%d, cx3=%d%n", cx2,cx3);

        //在数组的指定位置查找元素,参数范围(1,3)包含的数组元素为[3,5]
        //该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1)。
        int cx4=Arrays.binarySearch(fn,1,3,10);
        //该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1);
        int cx5=Arrays.binarySearch(fn,1,3,-3);
        //该搜索键在范围内,但不是数组元素,由1开始计数,返回负的插入点索引值
        int cx6=Arrays.binarySearch(fn,1,3,4);
        //该搜索键在范围内,且是数组元素,由0开始计数,返回搜索值的索引值
        int cx7=Arrays.binarySearch(fn,1,3,5);
        System.out.println("-------------------------");
        System.out.println("用参数指定查找范围示例:");
        System.out.println("第一种情况:cx4= "+cx4);
        System.out.println("第二种情况:cx5= "+cx5);
        System.out.println("第三种情况:cx6= "+cx6);
        System.out.println("第四种情况:cx7= "+cx7);
    }
}

运行结果

不指定查找范围示例:
数组fn的内容:[1, 3, 5, 7, 9]
[5]找到:cx1=2
[6][4]未找到:cx2=-4, cx3=-3
-------------------------
用参数指定查找范围示例:
第一种情况:cx4= -4
第二种情况:cx5= -2
第三种情况:cx6= -3
第四种情况:cx7= 2

原文地址:https://www.cnblogs.com/nnzhang/p/11791497.html

时间: 2024-10-14 04:33:36

Java中数组操作 java.util.Arrays 类常用方法的使用的相关文章

【java】java.util.Arrays类常用方法

1 package Arrays类; 2 3 import java.util.Arrays; 4 5 public class TestArrays { 6 public static void main(String[] args) { 7 int[] a={1,9,3,5,7,8,2,6,0,4}; 8 System.out.println(Arrays.binarySearch(a, 9));//-11 9 Arrays.sort(a); 10 System.out.println(Ar

java.util.Arrays类

java.util.Arrays类能方便的操作数组,它所有的方法都是静态的. 1.filll方法 :给数组中的某段元素附上相同值. 2.sort方法:对数组中某段元素排序. 3.equals方法:比较两个数组,判断的是数组中元素值是否相等. 4.binarySearch方法:对排过序的数组进行二分法查找. 不错的例子: /*-------文件名: UsingArrys.java-------*/ package com.sjx.test; import java.util.Arrays; /**

java.util.Arrays类详解

为实现数组的排序和查找.数组的比较和对数组填充元素,java.util.Arrays类包括各种各样的静态方法.这些方法都有对所有基本类型的重载方法. 可以使用sort方法对整个数组或部分数组进行排序.例如,下面的代码对数值型数组和字符型数组进行排序. double[] numbers = {6.0,4.4,1.9,2.9,3.4,3.5}; java.util.Arrays.sort(numbers);最后的结果是[1.9, 2.9, 3.4, 3.5, 4.4, 6.0]默认为升序排列 cha

将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed income", "futures", "options"}; List<String> assetList = Arrays.asList(asset);

Java中数组的特性

转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间.在C,C++等语言中,数组的定义简洁清晰,而在Java中确有一些会让人迷惑的特性.本文就尝试分析这些特性. Java中的数组是对象吗? Java和C++都是面向对象的语言.在使用这些语言的时候,我们可以直接使用标准的类库,也可以使用组合和继承等面向对象的特性

在java 中,数组与 List&lt;T&gt; 类型的相互转换

在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 String[] myStr = {"1","2","4","9","7"}; List<String> listStr = new ArrayList<String>(); Colle

C++ 的向量结构结合了Java中数组和向量两者的优点

C++ 的向量结构结合了Java中数组和向量两者的优点.一个C++ 的向量可以方便的被访问,其容量又可以动态的增长.如果 T 是任意类型,则 vector<T> 是一个元素为 T 类型的动态数组.下面的语句 vector<int> a; 产生一个初始为空的向量.而语句 vector<int> a(100); 生成一个初始有100个元素的向量.你可以使用push_back 函数来添加元素: a.push_back(n); 调用 a.pop_back() 从a中取出最后一个

全面解释java中StringBuilder、StringBuffer、String类之间的关系

http://www.jb51.net/article/33398.htm String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,StringBuffer和StringBuilder类功能基本相似 1. String 类  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不

java中数组,列表,集合的基本用法

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class shuzu { public static void main(String[] args){ //数组 array(); //列表 list(); //集合 map(); } public static void array(){ int[] a=new int[]{0,1