6.27クラスノート配列


6.27クラスノート配列
1、配列の概要
  • 配列は参照タイプであり、親はObjectである.
  • 配列は実際にはコンテナであり、データの集合である.
  • 配列には、基本データ型も参照データ型も格納できます.
  • 配列は参照データ型であるため、配列はスタックメモリに格納される.
  • 配列格納オブジェクトは、直接格納オブジェクトではなく、オブジェクトのメモリアドレスを格納します.
  • 配列が作成されると、長さは可変ではありません.
  • 配列の分類:1次元、2次元、3次元.
  • 配列にはlength属性があり、配列の長さを取得します.
  • 配列の要素タイプが統一されています.
  • 配列の要素メモリアドレスは連続しています.
  • すべての配列は、配列全体のメモリアドレスとして最初の要素のアドレスを使用します.
  • 要素には下付き(インデックス)があり、0から始まります.
  • 配列の長所と短所:利点:下付き要素をクエリー/検索/取得する際の効率が非常に高い.クエリの効率が最も高いデータ構造といえます.なぜ検索効率が高いのですか?第一に、各要素のメモリアドレスは空間記憶上連続している.第二に、各要素のタイプは同じなので、スペースの大きさは同じです.第三に、第一の要素のメモリアドレスを知っていて、各要素の占有空間の大きさを知っていて、また下付き文字を知っていて、だから1つの数学の表現式を通じてある下付き文字の要素のメモリアドレスを計算することができます.メモリアドレスを直接介して要素を位置決めするので,配列の検索効率が最も高い.配列に100個の要素が格納されているか、100万個の要素が格納されているかは、要素のクエリー/検索では効率が同じです.配列の要素が検索されるときに1つずつ検索されず、数学式で計算されるからです.(1つのメモリアドレスを算出し、直接位置付けする.)欠点:第1:配列中の各要素のメモリアドレスが連続することを保証するため、配列上でランダムに要素を削除または増加する時、効率は低く、ランダムに要素を削除するのは後の要素が前後に統一的に前方または後方に変位する操作にかかわるためである.第2:配列はビッグデータ量を記憶することができず、何?メモリ領域に特に大きな連続メモリ領域を見つけるのは難しいからです.注意:配列内の最後の要素の削除には、効率の影響はありません.

  • 2、配列の定義
  • 構文フォーマット:int[]array 1;double[] array2; boolean[] array3; String[] array4; Object[] array5;
  • 初期化配列、配列の定義
  • 1、動的初期化int[] array = new int[5];//ここの5は配列の要素の個数を表します.//長さ5個のintタイプ配列を初期化し、各要素のデフォルト値0 String[] names = new String[6];//長さ6個のStringタイプ配列を初期化し、各要素のデフォルト値nullを初期化します.
    2、静的初期化int[] array = {100, 2100, 300, 55};
    public static void main(String[] args) {
         
            //  
            /*
                     
                    1、    ,  new       
                        int [] array1 = new int[    ];
                    2、    
                        int [] array2 = {1,2,3};
             */
    
            //1、    ,          3 int     
            int [] array1 = new int[3];
    
    
            //2、                    [  /  ]
            array1[0] = 1;
            array1[1] = 2;
            array1[2] = 3;
    
    
            System.out.println(array1[0]);
            System.out.println(array1[1]);
            System.out.println(array1[2]);
    
            //4、             
            System.out.println(array1[array1.length-1]);
        }
    

    3、配列の遍歴
    配列を操作する場合、配列内の各要素に順次アクセスする必要があることがよくあります.この操作を配列の遍歴と呼びます.配列の遍歴forループの使用
    //    
    int[] arr = {
         1,2,3,4,5};
    
    //  for    
    for(int i = 0;i<arr.length;i++){
         
        System.out.println(arr[i])
    }
    
    //    for  
    /*
        for (                :           ) {
            System.out.println(i)
        }
    */
    for(int i :array1){
         
    	System.out.println(i);
    }
    

    4、配列最値の取得
    4.1最大値の取得
    	/**
         * @param array     
         * @return           
         */
        public static int getArrayMax(int[] array) {
         
    
            //         
            int max = array[0];
            for (int i = 1; i < array.length; i++) {
         
                //  ,         max ,      max
                if (max < array[i]) {
         
                    max = array[i];
                }
            }
            //     
            return max;
        }
    

    以上のメソッドを呼び出す
     public static void main(String[] args) {
         
    
            //      ,      
            int [] array01 = {
         2,4,6,8,9,11};		
    		//                   ,      
            int maxNum = ArrayUtil.getArrayMax(array01);
            System.out.println("     maxNum = " + maxNum);
    }
    

    結果配列の最大値maxNum=11を出力します.
    4.2最小値の取得
     /**
         * @param array     
         * @return           
         */
        public static int getArrayMin(int[] array) {
         
    
            //         
            int min = array[0];
            for (int i = 1; i < array.length; i++) {
         
                //  ,         min ,      min
                if (min > array[i]) {
         
                    min = array[i];
                }
            }
            //     
            return min;
        }
    

    以上のメソッドを呼び出す
    
    public static void main(String[] args) {
         
    
            //      ,      
            int [] array01 = {
         2,4,6,8,9,11};
        	//                   ,      
            int minNum = ArrayUtil.getArrayMin(array01);
            System.out.println("     minNum = " + minNum);
    }
    

    出力結果配列最小値minNum=2.
    5、二つの異常
    5.1配列境界異常
    各配列のインデックスには、0~length-1の範囲があります.配列の要素にアクセスする場合、インデックスはこの範囲を超えてはいけません.そうしないと、プログラムがエラーを報告します(ArrayIndexOutOfBoundsException).
    int[] array1 ={
         1, 2, 3};
    //        ,     ArrayIndexOutOfBoundsException
    System.out.println(array1[3]);
    

    array 1配列のインデックスの最大値は2であり、array 1[3]にアクセスすると、範囲を超え、システムエラーが発生する
    5.2空ポインタ異常
    変数を使用して配列を参照する場合、変数は有効な配列オブジェクトを指し示す必要があります.変数の値がnullの場合、配列を指し示さないことを意味します.この場合、変数を介して配列にアクセスする要素に空のポインタ異常が発生します(Null PointerException).
    int[] array1 ={
         1, 2, 3};
    
    //        ,    NullPointerException
    array1 = null;
    System.out.println(array1.length);
    

    6、配列の並べ替え
    せんたくソートほう
    概要:
    下に0と表示されている要素を配列の中で最も小さい値とし、その値をそれぞれ後のインデックスに対応する値と比較し、その値より小さい要素があれば、この2つの値の位置を入れ替えると、より小さい要素が使用され、その後の要素と比較し、より小さい要素があれば、この2つの値の位置を入れ替える.すべての要素を比べ終わるまで、最小の要素が1位に現れます.次に2回目のソートを行い、下の1からlength-1回繰り返します.これでソート完了
    public class ArrayTest06 {
         
        //   :{3, 7, 6, 9, 2, 1, 8}            
            /*
                0.     ,      0      
                1.         
                2.               
             */
        public static void main(String[] args) {
         
            //    int     
            int[] array = {
         3, 7, 6, 9, 2, 1, 8};
            //               
            int[] array1 = sortArrays(array);
            System.out.println(ArrayUtil.printArray(array1));
    
        }
    
        /**
         *  int                    ,     
         *
         * @param array    int     
         * @return       
         */
        public static int[] sortArrays(int[] array) {
         
    
            for (int i = 0; i < array.length - 1; i++) {
         
                for (int j = i + 1; j < array.length; j++) {
         
                    //     i          
                    int min = i;
                    //                ,          
                    if (array[j] < array[min]) {
         
                        int temp = array[min];
                        array[min] = array[j];
                        array[j] = temp;
                    }
                }
            }
            //        
            return array;
        }
    }
    

    7、二次元配列
    2 D配列は多次元配列に属し、多次元配列とは何か、配列要素のタイプが配列である場合に多次元配列になります.
    //1、       
            int[][] array1 = new int[3][4];//    
            int[][] array2 = {
         {
         1,2,3},{
         4,5,6,7},{
         8,9,0,10,11}};//    
    //2、       
    		array1[0][1]=1;
    		array1[0][2]=2;
    		array1[0][3]=3;
    		array1[0][4]=4;
    //3、       
            for (int i = 0; i < array2.length; i++) {
         
                for (int j = 0; j < array2[i].length; j++) {
         
                    System.out.println("array2 [" + i + "]" + "[" + j + "]=" + array2[i][j]);
                }
            }
    

    8、Javaがツールクラスを持参する方法
    java.util.Arraysパッケージには配列に関する方法がたくさんあります.
  • Arrays.sort()メソッド並べ替え小から大
  • Arrays.fill(int[]a,int val)メソッドは、配列の各要素の値
  • を置換するために指定されたint値valを使用する.
  • Arrays. fill(int[]a,int fromIndex,int toIndex,int val)は、配列の指定された区間インデックス内の値を、指定されたint値valに置き換えます.左閉右開
  • Arrays.copyOf(int[]original,int newLength)コピー配列指定コピーのインデックス0からnewLength終了まで
  • Arrays.copyOfRange(int[]original,int from,int to)は、指定した配列で指定した範囲を新しい配列にコピーします.左閉右開
  •     public static void main(String[] args) {
         
    
            //    int     
            int[] arr = {
         3, 6, 7, 9, 2, 4, 8, 1, 5};
    
            // Arrays.sort()          
            Arrays.sort(arr);
    
            //Array.toString()  ,         
            System.out.println(Arrays.toString(arr));
    
            //Arrays.fill(int[] a,int val)       int val            
            //Arrays.fill(arr,0);
            //System.out.println(Arrays.toString(arr));
    
            //fill(int[] a, int fromIndex, int toIndex, int val)
            //    int val               。    
            Arrays.fill(arr,0,2,1);
            System.out.println(Arrays.toString(arr));
    
            // copyOf(int[] original, int newLength)
            //             0   newLength  
            int[] result = Arrays.copyOf(arr,5);
            System.out.println(Arrays.toString(result));
    
            //copyOfRange(int[] original, int from, int to)
            //                     。    
            int[] result1 = Arrays.copyOfRange(arr,1,5);
            System.out.println(Arrays.toString(result1));
        }