Javaにおける配列および配列アプリケーションの拡張について

107113 ワード

配列の定義
  • 配列は、同じタイプのデータの秩序化集合
  • である.
  • 配列は、同じタイプのいくつかのデータを記述し、一定の前後順に並べて組み合わせた
  • である.
  • 各データは配列要素と呼ばれ、各配列要素は下付き文字でアクセスでき、下付き文字は0から
  • の計算を開始する.
    配列の宣言と作成
  • まず配列の変数を示してこそ、プログラムで配列を使用して変数を宣言する構文が
    int[]  nums;  //    
    int nums[];//    ,       
    
  • である.
  • java言語はnewオペレータで配列を作成し、構文は以下の
    int[] nums=new int[]
    
  • である.
  • 配列の要素はインデックスによってアクセスされ、配列インデックスは0から
  • である.
  • 取得配列の長い用:配列名.length
  • package com.YouHaoXin.array;
    
    public class ArrayDemo01 {
        public static void main(String[] args) {
            int[] nums;//1.      
            nums=new int[10];//2.      
            //int[] nums=new int[10];            
            nums[0]=1;//3.     
            nums[1]=10;
            nums[2]=100;
            nums[3]=1000;
            nums[4]=10000;
            nums[5]=2;
            nums[6]=20;
            nums[7]=200;
            nums[8]=2000;
            nums[9]=20000;
            System.out.println(nums[1]);//10
            //        
            int sun=0;
            for (int i = 0; i < nums.length; i++) {
                //nums.length         
    
                sun=sun+nums[i];//        
    
            }System.out.println("   :"+sun);//      :33333
    
            System.out.println("=============================");
            char[] nums1=new char[10];
            nums1[0]='A';
            nums1[1]='B';
            nums1[2]='C';
            nums1[3]='D';
            nums1[4]='E';
            nums1[5]='F';
            nums1[6]='G';
            nums1[7]='H';
            nums1[8]='I';
            nums1[9]='J';
    
            System.out.println(nums1[9]);//J
            
        }
        
    }
    

    メモリ解析
  • 宣言配列は、宣言のタイプがスタックに存在する
  • である.
  • 配列を作成するには、宣言されたタイプがスタックに空間を開き、配列
  • を格納します.
  • 配列要素に
  • を割り当てる
    配列の3種類の初期化
  • 静的初期化
    //   :int[] a={1,2,3};
            //     :  +  
            int[]  arrayNums={1,2,3,4,5,6};
            for (int i = 0; i < 6; i++) {
                System.out.print(arrayNums[i]+"\t");
    
            }
            System.out.println();
    
    
  • 動的初期化
    /*   :int[] a=new int[2];
    a[0]=1;
    a[1]=2;
    */
    
  • デフォルト初期化
  • 配列は参照タイプであり、その要素はクラスのインスタンス変数に相当するため、配列が割り当てられると、各要素もインスタンス変数と同様に
  • を暗黙的に初期化する.
    //     :       ,       ,       
    int[] arrayNums1=new int[5];
    arrayNums1[0]=10;
    arrayNums1[1]=100;
    arrayNums1[2]=1000;
    arrayNums1[3]=10000;
    arrayNums1[4]=100000;
    for (int i = 0; i < 5; i++) {
        System.out.print(arrayNums1[i]+"\t");//10 100 1000 10000 100000
    }
    

    配列の4つの基本的な特徴
  • その長さは決定され、配列が作成されると、彼のサイズは変更できない
  • である.
  • 要素は同じタイプでなければなりません.ブレンドタイプは許可されません.
  • 配列の要素は、基本タイプおよび参照タイプ
  • を含む任意のタイプであってもよい.
  • 配列の変数は参照タイプに属し、オブジェクトと見なされ、配列オブジェクト自体がスタックに格納されている.

  • 配列の結果
  • の下の合法区間は、[0.length-1]で、境界を越えると間違って報告されます.
  • ArrayIndexOutOfBoundsException:配列の下付き境界異常を示す
  • 配列構造の注意点
  • 配列は、同じデータ型(任意のタイプであってもよい)の秩序化集合
  • である.
  • 配列もオブジェクトであり、配列の要素はオブジェクトのメンバー
  • に相当する.
  • 配列の長さは決定され、可変ではなく、境界を越えると
  • とエラーが発生します.
    配列の使用
  • 一般Forサイクル
    package com.YouHaoXin.array;
    
    public class ArrayDemo03 {
        public static void main(String[] args) {
            //  For     
            int[] arrays={10,20,30,40,50,60};
    
            //         
            for (int i = 0; i <arrays.length; i++) {
                System.out.print(arrays[i]+"\t");
    
            }
            System.out.println();
            //         
            int sun=0;
            for (int i = 0; i <arrays.length; i++) {
                sun=sun+arrays[i];
    
            }
            System.out.println("sun="+sun);
            //          
            int result=arrays[0];
            for (int i = 1; i < arrays.length; i++) {
    
                if (result<arrays[i]){
                    result=arrays[i];
                }
            }
            System.out.println("max="+result);
    
    
        }
    }
    
  • 強化Forサイクルの使用
    int[] arrays = {10, 20, 30, 40, 50, 60};
    //  for     
    for (int array : arrays) {
        System.out.print(array+"\t");//10  20 30 40 50 60 
    }
    
  • 配列の作り方
    public static void main(String[] args) {
        int[] arrays = {10, 20, 30, 40, 50, 60};
        
            printArray(arrays);//10	20	30	40	50	60
            System.out.println();
            System.out.println("sun="+sunArray(arrays));//sun=210
    }
          //        
        //         
        public static void printArray(int[] arrays){
            for (int i = 0; i <arrays.length ; i++) {
                System.out.print(arrays[i]+"\t");
    
            }
    
        }
        //         
        public static int sunArray(int[] arrays){
            int sun=0;
            for (int i = 0; i <arrays.length; i++) {
                sun=sun+arrays[i];
            }return sun;
        }
        
    
  • 参照
  • 配列戻り値
    public static void main(String[] args) {
        int[] arrays = {10, 20, 30, 40, 50, 60};
        int[] i = reverse(arrays);
        printArray(i);//60	50	40	30	20	10
    }
        //       
        //      
        public static int[] reverse(int[] arrays){
        int[] result=new int[arrays.length];
        for (int i = 0,j=arrays.length-1; i <arrays.length ; i++,j--) {
                result[j]=arrays[i];
            }return result;
        }
        
        
    
  • 2 D配列2 Dはいれつ
  • 2 2次元配列は、1つの1次元配列に別の1次元配列がネストされている
    package com.YouHaoXin.array;
    
    public class ArrayDemo05 {
        public static void main(String[] args) {
            //    
            /*
                    4 2    
            1,2  arrays[0][0],arrays[0][1]
            3,4  arrays[1][0],arrays[1][1]
            5,6  arrays[2][0],arrays[2][1]
            7,8  arrays[3][0],arrays[3][1]
             */
            int[][] arrays={{1,2},{3,4,},{5,6},{7,8}};
            System.out.println(arrays[2][1]);//6
            for (int i = 0; i <arrays.length ; i++) {
                for (int j = 0; j <arrays[i].length ; j++) {
                System.out.print(arrays[i][j]+"\t");//12 34    56 78
                }
            }
        }
    }
    
  • と見なすことができる.
    package com.YouHaoXin.sort;
    
    import java.util.Scanner;
    
    public class SortDemo01 {
        public static void main(String[] args) {
            //        1:         
            int[][] arrays = {{22, 66, 44}, {77, 33, 88}, {25, 45, 65}, {11, 66, 99}};
            int sun = 0;
            for (int i = 0; i < arrays.length; i++) {
                for (int j = 0; j < arrays[i].length; j++) {
                    sun = sun + arrays[i][j];
                }
            }
            System.out.println("sun=" + sun + "  ");
            System.out.println("==========================");
            /*        2:         
            1  
            1  1  
            1  2  1  
            1  3  3  1  
            1  4  6  4  1  
             */
            
            Scanner scanner = new Scanner(System.in);
            System.out.println("     ");
            int count = scanner.nextInt();
    
            int[][] arrays1 = new int[count][count];
    
            for (int i = 0; i <arrays1.length ; i++) {
                arrays1[i][0] = 1;
                arrays1[i][i] = 1;
            }
    
            for (int i = 2; i < arrays1.length; i++) {
                for (int j = 1; j <= i; j++) {
    
                    arrays1[i][j] = arrays1[i - 1][j - 1] + arrays1[i - 1][j];
                }
            }
            for (int i = 0; i < arrays1.length; i++) {
                for (int j = 0; j <= i; j++) {
    
                    System.out.print(arrays1[i][j]+"\t");
                }
                System.out.println();
                
            }
    

    配列ツールクラス:ArraysクラスArraysクラス
  • 配列オブジェクト自体を使用する方法がないため、データオブジェクトに対していくつかの基本操作を行うことができ、APIにツールクラスArraysを提供して使用することができ、データオブジェクトに対していくつかの基本操作を行うことができ、JDKヘルプドキュメントからもこのクラス
  • を見つけることができます.
  • ArraysクラスのメソッドはすべてStatic修飾の静的メソッドであり、クラス名を直接使用して
    package com.YouHaoXin.array;
    
    import java.util.Arrays;
    
    public class ArrayDemo06 {
        public static void main(String[] args) {
            //Arrays      
            int[] a={5,7455,45,458,54,81,35,157};
            int[] b={5, 2, 2, 2, 2, 157, 458, 7455};
    
            //      :Arrays,toString
            System.out.println(Arrays.toString(a));//[5, 7455, 45, 458, 54, 81, 35, 157]
            array(a);//[5, 7455, 45, 458, 54, 81, 35, 157]
            System.out.println();
            //       :Arrays.sort
            Arrays.sort(a);//    
            System.out.println(Arrays.toString(a));//[5, 35, 45, 54, 81, 157, 458, 7455]
            //                  :Arrays.binarySearch
            System.out.println( Arrays.binarySearch(a,1,6,55));//-5
            //          :Arrays.fill
            Arrays.fill(a,1,5,2);
            System.out.println(Arrays.toString(a));//[5, 2, 2, 2, 2, 157, 458, 7455]
            //          :Arrays.equals
            System.out.println(Arrays.equals(a,b));//true
    
    
        }
        public static void array (int[] a){
    
            for (int i = 0; i < a.length; i++) {
                if (i==0){
                    System.out.print("[");
                }
    
                if (i==a.length-1){
                    System.out.print(a[i]+"]");
                }else{
                    System.out.print(a[i]+", ");
                }
            }
        }
    
    }
    
  • を呼び出すことができます.
    にぶんたんさくほう
    1.二分検索法は、最大インデックス値、最小インデックス値および中間インデックス値の3つを入力値と比較して検索する.
    2.二分検索法を使用すると、配列はソートされた配列であり、同じ数字ではない必要があります.
    package com.YouHaoXin.sort;
    
    import java.util.Arrays;
    
    public class SortDome03 {
        public static void main(String[] args) {
            //     
            int[] arrays={1,20,54,5,51,81,26,95};
            Arrays.sort(arrays);//        ,        ,                 
            System.out.println(Arrays.toString(arrays));//[1, 5, 20, 26, 51, 54, 81, 95]
            int search = search(arrays,26);
            System.out.println(search);//7
    
        }
        public static int search (int[] arrays,int count){
            int max=arrays.length-1;//        
            int min=0;//        
            for (int i = (max+min)/2; i <arrays.length && min<=max; i=(max+min)/2) {
                if (count == arrays[i]){
                    return i;//         ,     
                } else if(count<arrays[(max+min)/2]){
                    max=(max+min)/2-1;//            ,      
                }else if(count>arrays[(max+min)/2]){
                    min=(max+min)/2+1;//            ,      
                }
                //      ,    ,    
    
                }
                 return -1;//           ,     -1;
                }
    
            }
    

    疎配列
  • 一つの配列の大部分が0である場合、または同じ値の配列がそうである場合、データ
  • を疎配列で保存することができる.
  • 疎配列の処理方式
  • 記録配列は全部で何行と列があって、何個の異なる値
  • があります
  • は、異なる値を有する要素の行、列および値を小規模な配列に記録し、プログラムの規模
  • を圧縮する.
    package com.YouHaoXin.array;
    
    import java.util.Arrays;
    
    public class ArrayDemo08 {
        public static void main(String[] args) {
            //  1
            int[][] arrays1=new int[11][11];
            arrays1[1][2]=1;
            arrays1[2][3]=2;
            System.out.println("       ");
            /*
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  1  0  0  0  0  0  0  0  0  
            0  0  0  2  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0  
            0  0  0  0  0  0  0  0  0  0  0   
             */
            //      
            for (int[] a:arrays1) {
                for (int b: a
                     ) {
                    System.out.print(b+"\t");
                }
                System.out.println();
                
            }
            System.out.println("=======================");
            //       
            //1.          
            int sun=0;
            for (int i = 0; i <arrays1.length ; i++) {
                for (int j = 0; j <arrays1[i].length ; j++) {
                    if (arrays1[i][j]!=0){
                        sun++;
                    }
                }
            }
            System.out.println("      :"+sun);
            //2.        
            int[][] arrays2=new int[sun+1][3];
            arrays2[0][0]=arrays1.length;//  : 
            arrays2[0][1]=arrays1[0].length;//  : 
           arrays2[0][2]=sun;//  : 
            //3.          
            int count=0;
           for (int i = 0; i <arrays1.length ; i++) {
                for (int j = 0; j <arrays1[i].length ; j++) {
                    if (arrays1[i][j]!=0){
                        count++;
                        arrays2[count][0]=i;
                        arrays2[count][1]=j;
                        arrays2[count][2]=arrays1[i][j];
                   }
    
               }
    
           }
           //4.      
            for (int i = 0; i <arrays2.length ; i++) {
                for (int j = 0; j <arrays2[i].length; j++) {
                    System.out.print(arrays2[i][j]+"\t");
                    if (j==arrays2[i].length-1){
                        System.out.println();
                        /*
                        11 11 2  
                        1  2  1  
                        2  3  2  
                         */
                    }
                }
            }
            System.out.println("==========================");
            //      
            int[][] arrays3=new int[arrays2[0][0]][arrays2[0][1]];
            for (int i = 1; i < arrays2.length; i++) {
                arrays3[arrays2[i][0]][arrays2[i][1]]=arrays2[i][2];
    
            }
            System.out.println("       ");
    
            for (int[] a:arrays3) {
                for (int b: a
                ) {
                    System.out.print(b+"\t");
                }
                System.out.println();
            }
                }
            }
    
    package com.YouHaoXin.array;
    
    public class ArrayDemo09 {
        public static void main(String[] args) {
            //  2
            int[][] arrays1=new int[6][7];
            arrays1[0][3]=22;
            arrays1[0][6]=15;
            arrays1[1][1]=11;
            arrays1[1][5]=17;
            arrays1[2][3]=-6;
            arrays1[3][6]=39;
            arrays1[4][0]=91;
            arrays1[5][2]=28;
    
            for (int[] a:arrays1
                 ) {
                for (int b:a
                     ) {
                    System.out.print(b+"\t");
                }
                System.out.println();
                /*
                0  0  0  22 0  0  15 
                0  11 0  0  0  17 0  
                0  0  0  -6 0  0  0  
                0  0  0  0  0  0  39 
                91 0  0  0  0  0  0  
                0  0  28 0  0  0  0  
                 */
            }
            //        
            int sun=0;
            for (int i = 0; i <arrays1.length ; i++) {
                for (int j = 0; j <arrays1[i].length; j++) {
                    if (arrays1[i][j]!=0){
                        sun++;
                    }
                }
    
            }
            //         
            System.out.println("sun="+sun);
            int[][] arrays2=new int[sun+1][3];
            arrays2[0][0]=arrays1.length;
            arrays2[0][1]=arrays1[0].length;
            arrays2[0][2]=sun;
    
            int count=0;
            for (int i = 0; i < arrays1.length; i++) {
                for (int j = 0; j <arrays1[i].length ; j++) {
                    if (arrays1[i][j]!=0){
                        count++;
                        arrays2[count][0]=i;
                        arrays2[count][1]=j;
                        arrays2[count][2]=arrays1[i][j];
    
                    }
                }
    
            }
            //      
            for (int[] a:arrays2
            ) {
                for (int b:a
                ) {
                    System.out.print(b+"\t");
                }
                System.out.println();
                /*
                6  7  8  
                0  3  22 
                0  6  15 
                1  1  11 
                1  5  17 
                2  3  -6 
                3  6  39 
                4  0  91 
                5  2  28
                 */
            }
            //      
            int[][] arrays3=new int[arrays2[0][1]][arrays2[0][1]];
            for (int i = 1; i <arrays2.length ; i++) {
                for (int j = 0; j <arrays2[i].length ; j++) {
                   arrays3[arrays2[i][0]][arrays2[i][1]]=arrays2[i][2];
                }
            }
            for (int[] a:arrays3
            ) {
                for (int b:a
                ) {
                    System.out.print(b+"\t");
                }
                System.out.println();
            }
        }
    }