記事の配列を改善するJava(2)

前回の記事では、配列を定義し、配列と1次元配列および2次元配列を簡単に紹介しました。配列はデータの格納に使用されることがわかっています。データに関しては、データに対する操作、つまり、追加、削除、特に配列に関しては、設計はデータ構造とアルゴリズムに関連しています。アルゴリズムの内容については、データ構造とアルゴリズムシリーズのブログで詳しく説明します。このブログでは、 Arrayクラスに基づく関連メソッド、つまり、配列の最大値、最小値、最小値をカウントします。平均、合計、コピー配列、配列比較、配列要素比較、配列並べ替え、検索などの実装。

(1)Arrayクラスの概要

java.util.Arraysクラスは、配列を操作するためのさまざまなメソッド(並べ替えや検索など)を含む、配列を操作するためのツールクラスです。配列の静的メソッドのセットがあり、

  • このクラスには、配列を操作するためのさまざまなメソッド(並べ替えや検索など)が含まれています。このクラスには、配列をリストとして扱うことができる静的ファクトリも含まれています。
  • 指定された配列参照が空のNullPointerException場合、特に明記されていない限り、このクラスのすべてのメソッドは1つをスローします。

(2)配列の最大値、最小値、平均値、および合計をカウントします 

package arrays;//: arrays/ArrayOptions.java
// Initialization & re-assignment of arrays.
class ArrayOption {
  public static void main(String args[]) {
    int data[] = new int[] {1, 2, 3, 4, 66, 5, 6, 7, 8, 9};
    double result[] = stat(data);
    double max =result[0];
    double min=result[1];
    double sum=result[2];
    double arr=result[3];
    System.out.println("最大值:" + max);
    System.out.println("最小值:" + min);
    System.out.println("数据总和:" + sum);
    System.out.println("平均值:" + arr);
  }

  //此时需要返回的数据一共有四个,那么一个方法只能够返回一种数据类型,所以应该使用数组返回
  //数组[0]为最大值、数组[1]为最小值、数组[2]为数据总和、数组[3]为平均值
  public static double[] stat(int data[]) {
    double reData[] = new double[4];
    reData[0] = data[0];
    reData[1] = data[0];
    reData[2] = data[0];
    for(int x = 1; x < data.length; x++) {
      reData[2] += data[x];
      if(data[x] > reData[0])
        reData[0] = data[x];
      if(data[x] < reData[1])
        reData[1] = data[x];
    }
    reData[3] = reData[2] / data.length;
    return reData;
  }
}

操作の結果は次のとおりです。

(3)配列をコピーします

System.arraycopy()は、配列のコピーに使用されます。arraycopy()メソッドに必要なパラメーターは、元の配列からのコピーを開始する場所からのオフセットを表す元の配列と、コピーを開始する場所からのオフセットです。ターゲット配列、およびコピーされる要素の数。もちろん、配列に対する範囲外の操作は例外を引き起こします。

package arrays;//: arrays/CopyingArrays.java
// Using System.arraycopy()
import java.util.*;

public class CopyingArrays {
  public static void main(String[] args) {
    int[] i = new int[7];
    int[] j = new int[10];
    Arrays.fill(i, 47);
    Arrays.fill(j, 99);
    System.out.println("i = " + Arrays.toString(i));
    System.out.println("j = " + Arrays.toString(j));
    System.arraycopy(i, 0, j, 0, i.length);
    System.out.println("j = " + Arrays.toString(j));
    int[] k = new int[5];
    Arrays.fill(k, 103);
    System.arraycopy(i, 0, k, 0, k.length);
    System.out.println("k = " + Arrays.toString(k));
    Arrays.fill(k, 103);
    System.arraycopy(k, 0, i, 0, k.length);
    System.out.println("i = " + Arrays.toString(i));
    // Objects:
    Integer[] u = new Integer[10];
    Integer[] v = new Integer[5];
    Arrays.fill(u, new Integer(47));
    Arrays.fill(v, new Integer(99));
    System.out.println("u = " + Arrays.toString(u));
    System.out.println("v = " + Arrays.toString(v));
    System.arraycopy(v, 0, u, u.length/2, v.length);
    System.out.println("u = " + Arrays.toString(u));
  }
} /* Output:
i = [47, 47, 47, 47, 47, 47, 47]
j = [99, 99, 99, 99, 99, 99, 99, 99, 99, 99]
j = [47, 47, 47, 47, 47, 47, 47, 99, 99, 99]
k = [47, 47, 47, 47, 47]
i = [103, 103, 103, 103, 103, 47, 47]
u = [47, 47, 47, 47, 47, 47, 47, 47, 47, 47]
v = [99, 99, 99, 99, 99]
u = [47, 47, 47, 47, 47, 99, 99, 99, 99, 99]
*///:~

操作の結果は次のとおりです。

(4)配列の比較

配列が等しくなるための条件は、要素の数が等しくなければならず、対応する位置の要素も等しくなければならないということです。

package arrays;//: arrays/ComparingArrays.java
// Using Arrays.equals()
import java.util.*;


public class ComparingArrays {
  public static void main(String[] args) {
    int[] a1 = new int[10];
    int[] a2 = new int[10];
    Arrays.fill(a1, 47);
    Arrays.fill(a2, 47);
    System.out.println(Arrays.equals(a1, a2));
    a2[3] = 11;
    System.out.println(Arrays.equals(a1, a2));
    String[] s1 = new String[4];
    Arrays.fill(s1, "Hi");
    String[] s2 = { new String("Hi"), new String("Hi"),
      new String("Hi"), new String("Hi") };
    System.out.println(Arrays.equals(s1, s2));
  }
} /* Output:
true
false
true
*///:~

操作の結果は次のとおりです。

 

(5)配列要素の比較

 package arrays;//: arrays/CompType.java
// Implementing Comparable in a class.


import java.util.Arrays;

public class CompType  {

  public static void main(String[] args) {

    int []a=new int[]{11,22,55,99,452,65,1,5,486,22 };
    System.out.println("before sorting:");
    System.out.println(Arrays.toString(a));
    Arrays.sort(a);
    System.out.println("after sorting:");
    System.out.println(Arrays.toString(a));
  }
}

 

操作の結果は次のとおりです。

(6)配列の並べ替え

package arrays;//: arrays/StringSorting.java

import java.util.Arrays;
import java.util.Collections;

public class StringSorting {
  public static void main(String[] args) {

    String [] sa=new String[]{"YNzbr", "nyGcF", "OWZnT", "cQrGs", "eGZMm", "JMRoE", "suEcU", "OneOE"
            , "dLsmw", "HLGEa", "hKcxr", "EqUCB", "bkIna", "Mesbt", "WHkjU", "rUkZP", "gwsqP", "zDyCy", "RFJQA", "HxxHv"};
    System.out.println("Before sort: " + Arrays.toString(sa));
    Arrays.sort(sa);
    System.out.println("After sort: " + Arrays.toString(sa));
    Arrays.sort(sa, Collections.reverseOrder());
    System.out.println("Reverse sort: " + Arrays.toString(sa));
    Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER);
    System.out.println("Case-insensitive sort: " + Arrays.toString(sa));
  }
} /* Output:
Before sort: [YNzbr, nyGcF, OWZnT, cQrGs, eGZMm, JMRoE, suEcU, OneOE, dLsmw, HLGEa, hKcxr, EqUCB, bkIna, Mesbt, WHkjU, rUkZP, gwsqP, zDyCy, RFJQA, HxxHv]
After sort: [EqUCB, HLGEa, HxxHv, JMRoE, Mesbt, OWZnT, OneOE, RFJQA, WHkjU, YNzbr, bkIna, cQrGs, dLsmw, eGZMm, gwsqP, hKcxr, nyGcF, rUkZP, suEcU, zDyCy]
Reverse sort: [zDyCy, suEcU, rUkZP, nyGcF, hKcxr, gwsqP, eGZMm, dLsmw, cQrGs, bkIna, YNzbr, WHkjU, RFJQA, OneOE, OWZnT, Mesbt, JMRoE, HxxHv, HLGEa, EqUCB]
Case-insensitive sort: [bkIna, cQrGs, dLsmw, eGZMm, EqUCB, gwsqP, hKcxr, HLGEa, HxxHv, JMRoE, Mesbt, nyGcF, OneOE, OWZnT, RFJQA, rUkZP, suEcU, WHkjU, YNzbr, zDyCy]
*///:~

操作の結果は次のとおりです。
 

 
Before sort: [YNzbr, nyGcF, OWZnT, cQrGs, eGZMm, JMRoE, suEcU, OneOE, dLsmw, HLGEa, hKcxr, EqUCB, bkIna, Mesbt, WHkjU, rUkZP, gwsqP, zDyCy, RFJQA, HxxHv]
After sort: [EqUCB, HLGEa, HxxHv, JMRoE, Mesbt, OWZnT, OneOE, RFJQA, WHkjU, YNzbr, bkIna, cQrGs, dLsmw, eGZMm, gwsqP, hKcxr, nyGcF, rUkZP, suEcU, zDyCy]
Reverse sort: [zDyCy, suEcU, rUkZP, nyGcF, hKcxr, gwsqP, eGZMm, dLsmw, cQrGs, bkIna, YNzbr, WHkjU, RFJQA, OneOE, OWZnT, Mesbt, JMRoE, HxxHv, HLGEa, EqUCB]
Case-insensitive sort: [bkIna, cQrGs, dLsmw, eGZMm, EqUCB, gwsqP, hKcxr, HLGEa, HxxHv, JMRoE, Mesbt, nyGcF, OneOE, OWZnT, RFJQA, rUkZP, suEcU, WHkjU, YNzbr, zDyCy]

Process finished with exit code 0

 

(7)検索

package arrays;//: arrays/ArraySearching.java
// Using Arrays.binarySearch().
import java.util.*;
public class ArraySearching {
  public static void main(String[] args) {
    int []a=new int[]{11,22,55,99,452,65,1,5,486,22 };
    System.out.println("Sorted before: " + Arrays.toString(a));
    Arrays.sort(a);
    System.out.println("Sorted array: " + Arrays.toString(a));
    System.out.println("数组中22 出现的位置:"+Arrays.binarySearch(a, 22));
  }
}

操作の結果は次のとおりです。

(8)配列を返す

package arrays;//: arrays/IceCream.java
// Returning arrays from methods.
import java.util.*;

public class IceCream {
  private static Random rand = new Random(47);
  static final String[] FLAVORS = {
    "Chocolate", "Strawberry", "Vanilla Fudge Swirl",
    "Mint Chip", "Mocha Almond Fudge", "Rum Raisin",
    "Praline Cream", "Mud Pie"
  };
  public static String[] flavorSet(int n) {
    if(n > FLAVORS.length)
      throw new IllegalArgumentException("Set too big");
    String[] results = new String[n];
    boolean[] picked = new boolean[FLAVORS.length];
    for(int i = 0; i < n; i++) {
      int t;
      do
        t = rand.nextInt(FLAVORS.length);
      while(picked[t]);
      results[i] = FLAVORS[t];
      picked[t] = true;
    }
    return results;
  }
  public static void main(String[] args) {
    for(int i = 0; i < 7; i++)
      System.out.println(Arrays.toString(flavorSet(3)));
  }
} /* Output:
[Rum Raisin, Mint Chip, Mocha Almond Fudge]
[Chocolate, Strawberry, Mocha Almond Fudge]
[Strawberry, Mint Chip, Mocha Almond Fudge]
[Rum Raisin, Vanilla Fudge Swirl, Mud Pie]
[Vanilla Fudge Swirl, Chocolate, Mocha Almond Fudge]
[Praline Cream, Strawberry, Mocha Almond Fudge]
[Mocha Almond Fudge, Strawberry, Mint Chip]
*///:~

操作の結果は次のとおりです。

上記のコードは、Javaプログラミングのアイデアから派生しています。

おすすめ

転載: blog.csdn.net/weixin_41792162/article/details/109709320