• java Arrays常用方法


    1. 简介

    Arrays类包含用于操作数组的各种方法(例如排序和搜索)。此类还包含一个静态工厂,允许将数组视为列表。

    如果指定的数组引用为null,则此类中的方法都抛出NullPointerException,除非另有说明。

     2. 方法说明

    List<T>  asList(T... a):返回由指定数组构成的大小固定的列表,该列表不能使用add和remove方法改变长度

    int binarySearch(Object[] a, Object key):使用二分查找元素的索引

    T[] copyOfRange(T[] original, int from, int to):复制数组,并且指定开始/结束索引

    T[] copyOf(T[] original, int newLength):复制数组,并且指定复制长度

    void fill(Object[] a, Object val):使用指定元素填充数组

    void fill(Object[] a, int fromIndex, int toIndex, Object val):使用指定数组填充数组,并且指定填充的开始/结束索引

    void sort(Object[] a):对数组排序,需要实现数组元素的Comparable接口

    void sort(Object[] a, int fromIndex, int toIndex):对指定开始/结束索引的数组排序,需要实现数组元素的Comparable接口

    void sort(T[] a, Comparator<? super T> c):对数组排序,需要实现数组元素的Comparator接口

    void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c):对指定开始/结束索引的数组排序,需要实现数组元素的Comparator接口

    String toString(Object[] a):数组转字符串

    static Stream<T> stream(T[] array):数组转为流

    static IntStream stream(int[] array):int数组转为流,还有DoubleStream和LongStream

     3. 简单示例

     1 /*
     2 *二分查找仅适用于有序的数组
     3 * */
     4 
     5 import java.util.*;
     6 import java.util.stream.Stream;
     7 
     8 public class ArraysFunc {
     9     public static void main(String[] args){
    10 
    11         String[] arr1 = new String[]{"a","b","b","d","c"};
    12 
    13         //数组转成长度固定的列表,不能使用add和remove方法改变list长度
    14         List<String> list1 = Arrays.asList(arr1);
    15         System.out.println(list1);        // [a, b, b, d, c]
    16 
    17         //使用二分查找元素索引
    18         int index = Arrays.binarySearch(arr1,"b");
    19         System.out.println(index);       // 2
    20 
    21         // 复制指定开始/结束位置的数组(不包含结尾)
    22         String[] arr2 = Arrays.copyOfRange(arr1, 1,3);
    23         System.out.println(Arrays.asList(arr2));   // [b, b]
    24 
    25         //复制指定长度的数组(索引从0开始)
    26         String[] arr3 = Arrays.copyOf(arr1,3);
    27         System.out.println(Arrays.asList(arr3));         // [a, b, b]
    28 
    29         // 判断数组是否等价
    30         boolean flag1 = Arrays.equals(arr1,arr2);
    31         System.out.println(flag1);   // false
    32 
    33         // 对数组填充指定元素,可指定范围(不包含结尾)
    34         Arrays.fill(arr3,"e");
    35         System.out.println(Arrays.asList(arr3));          // [e, e, e]
    36         Arrays.fill(arr3,0,2,"f");
    37         System.out.println(Arrays.asList(arr3));         // [f, f, e]
    38 
    39         // 对数组排序
    40         Arrays.sort(arr1);
    41         System.out.println(Arrays.asList(arr1));       // [a, b, b, c, d]
    42 
    43         // 将数组变成字符串,保留完整符号
    44         String str1 = Arrays.toString(arr1);
    45         System.out.println(str1);      // [a, b, b, c, d]
    46 
    47         // stream,可以用于数组类型转换
    48         String str = "1 3 2 5 6 4";
    49         String[] strArray = str.split(" ");
    50         Stream<String> stringStream = Arrays.stream(strArray);
    51         int[] intArray = Arrays.stream(strArray).mapToInt(Integer::parseInt).toArray();
    52         int[] intArr = Stream.of(strArray).mapToInt(Integer::parseInt).toArray();
    53     }
    54 }

     4. 说明

    4.1 使用Arrays.binarySearch()方法时,需要注意数组要是有序的,否则将会无法得到自己想要的结果。

          这是由于该方法使用二分查找法实现。

    4.2 使用Arrays.sort()方法时,对于自定义元素需要实现Comparable或者Comparator接口。

          关于两接口的实现参考如下:https://www.cnblogs.com/jfl-xx/p/10656433.html

    !!!

  • 相关阅读:
    C# DateTimePicker控件详解
    python2.7虚拟环境virtualenv安装及使用
    Python2.7 安装numpy报错解决方法
    关于C语言中递归的一点点小问题
    Drozer--AndroidApp安全评估工具
    Android--native层so文件调试
    New Blog
    小旭讲解 LeetCode 53. Maximum Subarray 动态规划 分治策略
    2017年度回忆与总结 – 心态
    基于文本图形(ncurses)的文本搜索工具 ncgrep
  • 原文地址:https://www.cnblogs.com/jfl-xx/p/10657357.html
Copyright © 2020-2023  润新知