Javaクラスライブラリ(a)の配列ツール

asListのセットに配列

  • 可変パラメータを受信するのセットに配列
public static <T> List<T> asList(T... a);
public static void main(String[] args) {
    List<Integer> list1 = Arrays.asList(1, 2, 3);
    list1.forEach(System.out::println);  // 1 2 3

    Integer[] data = {1, 2, 3};
    List<Integer> list2 = Arrays.asList(data);
    list2.forEach(System.out::println); // 1 2 3
}

注意:このメソッドは、返す内部の静的クラス・アレイのArrayListを、むしろ私たちが通常使用しているものよりも、java.util.ListパッケージのArrayListに。固定静的クラスの配列サイズの下なので、リストへの追加ので、削除は、例外がスローされます。

アレイの塗りつぶしを埋めます

  • 配列全体を指定された要素が充填されています
//有多个不同数据类型的重载方法,此处列出一个
public static void fill(Object[] a, Object val);
public static void main(String[] args) {
    Integer[] data = {1, 2, 3, 4};
    Arrays.fill(data, 5);
    System.out.println(Arrays.toString(data)); // [5, 5, 5, 5]
}
  • 端たtoIndex(含まれていない)の位置に位置たfromIndex(含む)から指定された要素の配列を移入
//有多个不同数据类型的重载方法,此处列出一个
public static void fill(Object[] a, int fromIndex, int toIndex, Object val);
public static void main(String[] args) {
    Integer[] data = {1, 2, 3, 4};
    Arrays.fill(data, 0, 2, 5);
    System.out.println(Arrays.toString(data)); // [5, 5, 3, 4]
}

ソートソート/ parallelSort

  • 昇順に配列要素。要素型がソートアルゴリズムが安定して、ソートマージ使用するための参照タイプである高速ソートアルゴリズムを使用して基本的な型の要素型については、ランク付けアルゴリズムは不安定です。
//有多个不同数据类型的重载方法,此处列出一个
public static void sort(Object[] a);
public static void main(String[] args) {
    String[] data = {"1", "4", "3", "2"};
    System.out.println(Arrays.toString(data)); // [1, 4, 3, 2]
    Arrays.sort(data);
    System.out.println(Arrays.toString(data)); // [1, 2, 3, 4]
}
  • 配列要素の終了位置たtoIndexの開始が(含まれていない)ソートされる(含む)の開始位置たfromIndex。
//有多个不同数据类型的重载方法,此处列出一个
public static void sort(Object[] a, int fromIndex, int toIndex);
public static void main(String[] args) {
    String[] data = {"1", "4", "3", "2"};
    System.out.println(Arrays.toString(data)); // [1, 4, 3, 2]
    Arrays.sort(data, 0, 3);
    System.out.println(Arrays.toString(data)); // [1, 3, 4, 2]
}
  • カスタムコンパレータを使用してソートされた配列要素
public static <T> void sort(T[] a, Comparator<? super T> c);
public static void main(String[] args) {
    String[] data = {"1", "4", "3", "2"};
    System.out.println(Arrays.toString(data)); // [1, 4, 3, 2]

    // 实现字典序降序排列
    // 比较器返回大于1,o1大于o2,换位置;返回0,相等;返回负数,o1小于o2,位置不变
    Arrays.sort(data, (o1, o2) -> o2.compareTo(o1));
    System.out.println(Arrays.toString(data)); // [4, 3, 2, 1]
}
  • ソートされた配列要素(含まない)端たtoIndexの開始位置にfromIndexの位置(両端を含む)のカスタムコンパレータを使用して
public static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)
public static void main(String[] args) {
    String[] data = {"1", "4", "3", "2"};
    System.out.println(Arrays.toString(data)); // [1, 4, 3, 2]

    // 实现字典序降序排列
    // 比较器返回大于1,o1和o2换位置;返回0,相等;返回负数,不变
    Arrays.sort(data, 0, 3, (o1, o2) -> o2.compareTo(o1));
    System.out.println(Arrays.toString(data)); // [4, 3, 1, 2]
}
  • 上記の状況は、ソートする(平行)多核以下のように、データサイズが大きい場合、良好な性能、及び上記と同様の残りのオーバーロードされたメソッドが存在することになるでソートされている単球(シリアル)です。
public static <T extends Comparable<? super T>> void parallelSort(T[] a);
public static void main(String[] args) {
    String[] data = {"1", "4", "3", "2"};
    System.out.println(Arrays.toString(data)); // [1, 4, 3, 2]

    Arrays.parallelSort(data);
    System.out.println(Arrays.toString(data)); // [1, 2, 3, 4]
}

binarySearchを探します

  • 要素が見つからない場合は、返します。配列要素で見つかった場合は、配列内の指定した重要な要素正シーケンスを使用してバイナリ検索は、要素がインデックスを返します-(最后一次查找的索引值 + 1)ので、検索が負の失敗を返しています。
//有多个不同数据类型的重载方法,此处列出一个
public static int binarySearch(Object[] a, Object key);
public static void main(String[] args) {
    Integer[] data = {1, 5, 3, 7};
    //查找前的数组必须是正序的
    Arrays.sort(data);
    System.out.println(Arrays.toString(data));  //[1, 3, 5, 7]

    System.out.println(Arrays.binarySearch(data, 3)); //1

    //查找小于数组最小元素的数
    //程序会把数组看作 {0, 1, 3, 5, 7},此时0的索引值为0,则搜索0时返回 -(0 + 1) = -1
    System.out.println(Arrays.binarySearch(data, 0)); //-1

    //查找大于数组最大元素的数
    //程序会把数组看作 {1, 3, 5, 7, 10},此时10的索引值为4,则搜索10时返回 -(5 + 1) = -5
    System.out.println(Arrays.binarySearch(data,  10)); //-5
    
    //查找不是数组元素,但在数组范围内的数
    //程序会把数组看作 {1, 3, 5, 6, 7},此时6的索引值为3,则搜索10时返回 -(3 + 1) = -4
    System.out.println(Arrays.binarySearch(data, 6));  //-4
}
  • 要素の指定された範囲のインデックス値(含まない)端たtoIndexの位置に開始位置たfromIndex(含む)からのクエリにバイナリ配列を使用します。
//有多个不同数据类型的重载方法,此处列出一个
public static int binarySearch(Object[] a, int fromIndex, int toIndex, Object key);
public static void main(String[] args) {
    Integer[] data = {1, 5, 3, 7};
    //查找前的数组必须是正序的
    Arrays.sort(data);
    System.out.println(Arrays.toString(data));  //[1, 3, 5, 7]

    System.out.println(Arrays.binarySearch(data, 0, 2, 3)); //1
    
    //程序会把数组看作 {0, 1, 3},此时0的索引值为0,则搜索0时返回 -(0 + 1) = -1
    System.out.println(Arrays.binarySearch(data, 0, 2, 0)); //-1
    
    //程序会把数组看作 {1, 3, 10},此时10的索引值为2,则搜索10时返回 -(2 + 1) = -3
    System.out.println(Arrays.binarySearch(data, 0, 2, 10)); //-3
}

コピー配列copyOf / copyOfRange /のarraycopy

  • その内部コールコピー配列System.arraycopy()方法、アレイのより元の長さは、ヌルで充填される場合、インデックス0から始まります。
//有多个不同数据类型的重载方法,此处列出一个
static <T> T[] copyOf(T[] original, int newLength);
public static void main(String[] args) {
    Integer[] data1 = {5, 4, 3, 2};

    Integer[] data2 = Arrays.copyOf(data1, 2);
    System.out.println(Arrays.toString(data2)); // [5, 4]

    Integer[] data3 = Arrays.copyOf(data1, 5);
    System.out.println(Arrays.toString(data3)); // [5, 4, 3, 2, null]
}
  • 開始位置からアレイ以上の元の長さは、ヌルで充填される場合、配列の要素の範囲(含まない)終了する開始位置まで(含む)からコピーされます。
//有多个不同数据类型的重载方法,此处列出一个
public static <T> T[] copyOfRange(T[] original, int from, int to);
public static void main(String[] args) {
    Integer[] data1 = {5, 4, 3, 2};

    Integer[] data2 = Arrays.copyOfRange(data1, 0, 2);
    System.out.println(Arrays.toString(data2)); // [5, 4]

    Integer[] data3 = Arrays.copyOfRange(data1, 0, 5);
    System.out.println(Arrays.toString(data3)); // [5, 4, 3, 2, null]
}
  • この方法は、配列のarraycopyクラスではなく、クラスのシステム。この方法は、配列要素DESTの要素にコピーの開始長からsrcPosのsrcアレイであってもよい、destPos位置が配列DESTが割り当てられる開始します。
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
public static void main(String[] args) {
    Integer[] data1 = {5, 4, 3, 2, 1};
    Integer[] data2 = new Integer[5];

    System.arraycopy(data1, 1, data2, 0, 3);

    System.out.println(Arrays.toString(data1));  //[5, 4, 3, 2, 1]
    System.out.println(Arrays.toString(data2));  //[4, 3, 2, null, null]
}

分析等しいイコール/ deepEquals

  • A2を、点オブジェクト、直接それらが等しいかどうかを決定するためのプリミティブ要素の異なる配列は、要素の型への参照を呼び出す場合、その方法は等しく、分析2つの配列が、A2は同じ配列オブジェクトを参照する場合、真を返し、等しいです比較は、唯一の最後にtrueを返すために、真です。
//有多个不同数据类型的重载方法,此处列出一个
public static boolean equals(Object[] a, Object[] a2);
public static void main(String[] args) {
    Integer[] data1 = {1, 2, 3};
    Integer[] data2 = {1, 2, 3};
    
    System.out.println(Arrays.equals(data1, data2)); // true
    //数组对象没有重写equals方法,默认判断的是data1 == data2,是否为同个数组对象引用
    System.out.println(data1.equals(data2));  //false
}
  • 二多次元配列は同じ判定、判定モードであるとほぼ等しいです。
public static boolean deepEquals(Object[] a1, Object[] a2);
public static void main(String[] args) {
    Integer[][] data1 = {{1,2,3}, {1,2,3}};
    Integer[][] data2 = {{1,2,3}, {1,2,3}};
    System.out.println(Arrays.deepEquals(data1, data2)); // true
}

ハッシュ値を返しますのhashCode / deepHashCode

  • ハッシュ値を算出する方法と配列を返します
//有多个不同数据类型的重载方法,此处列出一个
public static int hashCode(Object a[]);
public static void main(String[] args) {
    Integer[] data1 = {1, 2, 3};
    Integer[] data2 = {1, 2, 3};

    System.out.println(Arrays.hashCode(data1));  //30817
    //数组对象没有重写hashCode方法,默认返回的是地址的哈希值
    System.out.println(data1.hashCode());   //460141958

    System.out.println(Arrays.hashCode(data2));  //30817
    System.out.println(data2.hashCode());   //1163157884
}
  • 多次元アレイを算出する方法は、ハッシュ値を返します
public static int deepHashCode(Object a[]);
public static void main(String[] args) {
    Integer[][] data1 = {{1, 2, 3}, {1, 2, 3}};
    Integer[][] data2 = {{1, 2, 3}, {1, 2, 3}};

    System.out.println(data1.hashCode());   //460141958
    System.out.println(Arrays.deepHashCode(data1));  //987105

    System.out.println(data2.hashCode());   //1163157884
    System.out.println(Arrays.deepHashCode(data2));  //987105
}

フォーマット文字列のtoString / deepToString

  • この方法は、文字列に配列、カンマとスペースで区切られた配列要素の複数の変換します。基準書き換えアレイ型要素の要件toString()方法は、要素をステッチされているので、この方法は、toString()値を返します。
//有多个不同数据类型的重载方法,此处列出一个
public static String toString(Object[] a);
public static void main(String[] args) {
    Integer[] data = {1, 2, 3};
    
    System.out.println(Arrays.toString(data)); // [1, 2, 3]
    //数组对象没有重写toString方法,默认返回的是地址的哈希值
    System.out.println(data.toString());  //[Ljava.lang.Integer;@1b6d3586
}
  • 文字列フォーマット多次元配列を返します。
public static String deepToString(Object[] a);
public static void main(String[] args) {
    Integer[][] data = {{1, 2, 3}, {1, 2, 3}};
    System.out.println(Arrays.deepToString(data)); // [[1, 2, 3], [1, 2, 3]]
}

要素生成SETALL / parallelSetAll

  • アレイ内のすべての要素は、各要素の使用によって提供されるシリアル・ジェネレータ関数が計算されます。
//有多个不同数据类型的重载方法,此处列出一个
public static <T> void setAll(T[] array, IntFunction<? extends T> generator);
public static void main(String[] args) {
    Integer[] data = {1, 2, 3, 4};
    // i为数组索引值
    Arrays.setAll(data, i -> data[i] * 2);
    System.out.println(Arrays.toString(data)); // [2, 4, 6, 8]
}
  • アレイ内のすべての要素は、各要素が提供するジェネレータ関数の並列使用は、データサイズが大きい場合、良好な性能があるので、計算されます。
//有多个不同数据类型的重载方法,此处列出一个
public static <T> void parallelSetAll(T[] array, IntFunction<? extends T> generator);
public static void main(String[] args) {
    Integer[] data = {1, 2, 3, 4};
    // i为索引值
    Arrays.parallelSetAll(data, i -> data[i] * 2);
    System.out.println(Arrays.toString(data)); // [2, 4, 6, 8]
}

Streamオブジェクトストリームに配列

  • 配列ストリームを変換する方法は、ストリームの流れはJava8新しいプログラミングAPIです。
//有多个不同数据类型的重载方法,此处列出一个
public static <T> Stream<T> stream(T[] array);
public static void main(String[] args) {
    Integer[] data = {1, 2, 3, 4};
    List<Integer> list = Arrays.stream(data).collect(toList());
    System.out.println(list);  //[1, 2, 3, 4]
}
  • この方法は、配列要素の範囲は、蒸気に変換される(含まない)終了位置endExclusiveに開始(含む)の位置startInclusiveから始まります。
//有多个不同数据类型的重载方法,此处列出一个
public static <T> Stream<T> stream(T[] array, int startInclusive, int endExclusive);
public static void main(String[] args) {
    Integer[] data = {1, 2, 3, 4};
    List<Integer> list = Arrays.stream(data, 0, 3).collect(toList());
    System.out.println(list); // [1, 2, 3]
}

参考:https://blog.csdn.net/Goodbye_Youth/article/details/81003817

おすすめ

転載: www.cnblogs.com/zongmin/p/11334592.html