整列

7977 ワード

たんれつ
生成:資料型[]変数名=new資料型[個数];
呼び出し:変数名[インデックス]
インデックス:0から、連続==数量-1
跳んでいないところ(0)から何回か踊ります
package com.bit.day06;

public class Ex01 {
	public static void main(String[] args) {
  
/*		su[0]=1;
		su[1]=3;
		su[2]=5;
		su[3]=7;
		su[4]=9;
*/
//		int su[] = new int[]{1,3,5,7,9};
		int[] su={1,3,5,7,9};                  //경우에 따라 허용하는 문법
		
		for(int i=0; i<5; i++){
			System.out.println(su[i]);
		}	
	}
}
su=ポインタとしての役割を果たす.参照変数です.(住所を参照)
Javaにはポインタの概念がないので、配列をオブジェクトとして印刷します.(ヒップ領域を使用)=タイルオブジェクト
したがって、比較値ではなく、比較参照-->場合によっては、希望の結果が出るかもしれません.
package com.bit.day06;

public class Ex02 {

	public static void main(String[] args) { 
		int[] arr1=new int[]{1,3,5,7};                  //배열 객체 생성
		int[] arr2=new int[]{1,3,5,7};                  //다른 배열 객체 생성
		int[] arr3={1,3,5,7};                           //또 하나의 배열 객체 생성
		int[] arr4=arr1;                       //배열의 얕은 복사
		arr1[0]=2;
		
		System.out.println(arr1==arr2);       //참조변수형이기 때문에 false
		System.out.println(arr1==arr3);       //똑같이 false
		System.out.println(arr1==arr4);        //true 출력
		
		for(int i=0; i<arr4.length; i++){
			System.out.println(arr4[i]);         //동일 객체이기 때문에 2,3,5,7 출력
		}
 	}
}
配列オブジェクト
  • 浅い放射線
    funcメソッドは転送配列されている.
  • package com.bit.day06;
    
    public class Ex03 {
    	
    	public static void func(int[] arr2){
    		for(int i=0; i<arr2.length; i++){
    			arr2[i]+=1;
    	}
    		
    }
    
    	public static void main(String[] args) {
    		int[] arr1={2,4,6,8};
    		System.out.println("before...");
    		for(int i=0; i<arr1.length; i++){
    			System.out.print(arr1[i]+" ");			//2 4 6 8 출력
    	}
    		System.out.println();
    		
    		func(arr1);			//스택에 메인 위에 func 메소드 쌓임, 배열을 전달 = 복사. 메인에서 선언한 arr1은 지역변수.
    		                    // 여기서 얕은 복사가 일어남
    		
    		
    		System.out.println("after...");
    		for(int i=0; i<arr1.length; i++){
    			System.out.print(arr1[i]+" ");
    	}
    		System.out.println(); 					//3 5 7 9 출력
      }
    }
  • 深放射(1)
  • package com.bit.day06;
    
    public class Ex04 {        //깊은 복사
    
    	public static void main(String[] args) {
    		int[] arr1={1,3,5,7};
    		int[] arr2;
    		arr2=new int[4];
    		for(int i=0; i<arr1.length; i++){
    			arr2[i]=arr1[i];
    			
    		}
    		
    		arr1[0]=1234;        //arr2의 원소는 바뀌지 않는다.
    		
    		for(int i=0; i<arr2.length; i++){
    			System.out.print(arr2[i]+" ");
    		}
    		
    	}
    }
  • 深放射(2)
  • package com.bit.day06;
    
    public class Ex05 {
    	public static void main(String[] args){
    		int[] arr1={2,4,6,8,10};
    		int[] arr2=new int[5];
    		
    		// 깊은복사기능을 제공 arraycopy메소드
    		// arraycopy(원본,원본시작 index, 복사될 결과물, 결과물 시작 index, 시작시점으로부터 몇개)
    		System.arraycopy(arr1, 0, arr2, 0, 5);          //인자를 전달하는 것은 얕은복사.
    		
    		for(int i=0; i<arr2.length; i++){                
    			System.out.println(arr2[i]+" ");
    		}
    	
    	}
    }
    arraycompyメソッドを使用して、
  • セクションのみをコピーします.
  • package com.bit.day06;
    
    public class Ex05 {
    	public static void main(String[] args){
    		int[] arr1={11,22,33,44};
    		int[] arr2={1,2,3,4,5,6,7,8,9};
    		
    		
    		System.arraycopy(arr1, 0, arr2, 2, 4);        //기능 : 깊은 복사를 수행한다.
    				
    		for(int i=0; i<arr2.length; i++){                
    			System.out.print(arr2[i]+" ");
    		}
    	
    	}
    }
  • アレイの深い複製(3,Arrays class)
  • package com.bit.day06;
    
    public class Ex06 {
    
    	public static void main(String[] args){
    		int[] arr1={1,3,5,7,9};
    		int[] arr2;
    	
    		arr2=java.util.Arrays.copyOf(arr1, 5);   //Arrays는 클래스. java.util이라는 패키지 안에 있는 것이다.
    	
    		for(int i=0; i<arr2.length; i++){
    			System.out.println(arr2[i]+" ");
    		}
      }
    }
  • アレイを完全にコピーします.copyOf
  • package com.bit.day06;
    
    import javax.tools.JavaCompiler;
    
    public class Ex06 {
    
    	public static void main(String[] args){
    		int[] arr1={1,3,5,7,9};
    		int[] arr2;
    	
    		arr2=java.util.Arrays.copyOf(arr1, 5);          
    	
    	/*	for(int i=0; i<arr2.length; i++){
    			System.out.println(arr2[i]+" ");
    		}
    	
    	*/	
    		//반복문을 돌리지 않아도 볼 수 있음.
    		 System.out.println(java.util.Arrays.toString(arr2));	//[1,3,4,7,9] 출력
      }
    }
  • Arrays.copyOfRange
  • package com.bit.day06;
    
    import javax.tools.JavaCompiler;
    
    public class Ex06 {
    
    	public static void main(String[] args){
    		int[] arr1={1,3,5,7,9};
    		int[] arr2;
    		int[] arr3={11,22,33,44,55,66,77,88,99};
    	
    		arr2=java.util.Arrays.copyOf(arr1, 5);          
    		
    		arr3=java.util.Arrays.copyOfRange(arr1, 1, 4);              // 3,5,7 출력
    				
    		 System.out.println(java.util.Arrays.toString(arr3));	
      }
    }
  • パッケージによる
    同じパッケージ:クラス名は
  • を省略しました
    package com.bit.day06;
    
    public class Ex07 {
    
    	
    	public static void func(int[] arr1){
    		System.out.println("call Ex07 func()...");
    	}
    	
    	
    	public static void main(String[] args) {
    		int[] arr={};
    		Ex07.func(arr);						//숨겨져있는 클래스명
    		
    	}
    }
    他のパッケージのクラス関数を使用する場合
    package com.bit.day06.pm;
    
    public class Ex01 {
    	
    	public static void func(int[] arr){
    		System.out.println("call Ex01 func()...");
    	}
    
    	public static void main(String[] args) {
    		int[] arr={};
    		com.bit.day06.Ex07.func(arr);          //다른 패키지의 클래스
    	}
    }
    String、Systemなどのクラスにもパッケージが存在する.
    java.langパッケージ-パッケージ名の詳細は説明しません(省略可能)



    複数のアレイ
    :配列
    package com.bit.day07;
    
    public class Ex01 {
    
    	public static void main(String[] args) {
    
            int[] su1=new int[]{1,2,3};
    		int[] su2=new int[]{4,5,6};
    		int[] su3=new int[]{7,8,9};
    		
    		//다중배열
    		//자료형[][] 변수명 = new 자료형[size][value의 size];
    		int[][] su4=new int[4][3];
    		su4[0]=su1;
    		su4[1]=su2;
    		su4[2]=su3;
    		su4[3]=new int[]{10,11,12};
    		
    		for(int i=0; i<su4.length; i++){           //su4는 4개의 배열을 담고있다. =>  su4.length=4
    			int[] temp=su4[i];
    		    	for(int j=0; j<temp.length; j++){     //temp.length = value의 size
    			       System.out.print(temp[j]+"\t");
    			}
    			System.out.println();
    		}
    	}
    }
  • temp配列を作成する必要のない重複文
  • 		for(int i=0; i<su4.length; i++){         
    			for(int j=0; j<su4[i].length; j++){
    			System.out.print(su4[i][j]+"\t");
    			}
    			System.out.println();
    		}
  • toString()出力
  • を使用
    public class Ex02 {
    
    	public static void main(String[] args) {
    
            int[][] arr1=new int[][]{
    				new int[]{1,2,3},
    				new int[]{4,5,6},
    				new int[]{7,8,9}
    		};
    
    		int[][] arr2={{1,2,3},{4,5,6},{7,8,9}};
    		
    //이상하게 출력됨. 제일 바깥쪽만 풀어서 보여준 것이다. for문이라면 바깥쪽 for문만 출력해준 것과 같다.
    		System.out.println(java.util.Arrays.toString(arr1));  
    	}
    }
    出力が正しいことを確認するには、
  • を変更します.
    int[][] arr2={{1,2,3},{4,5,6},{7,8,9}};
    		
    		
    		for(int i=0; i<arr2.length; i++){
    		System.out.println(java.util.Arrays.toString(arr2[i]));  
    		}
    	}
       


    配列=参照変数=オブジェクトへのアドレス値=>初期化=>値を指定しない場合はデフォルトnullに初期化
    複数配列-配列されたアドレスがあります.配列が作成されていない場合は、オブジェクトが存在しないため、アドレス値はnullです.そこにどんな数字を書いた瞬間も、その住所を指すからです.(0でも)
    element size=オブジェクトが作成されていません-->指向性のないアドレス=null



    複数のアレイの特性
    public class Ex04 {
    
    	public static void main(String[] args) {
    		int[][] arr1=new int[3][2];		//만들어놓고 밑에서 치환해버리니까 필요없는 객체가 생긴다--> [3][] 로 바꿀 수 있다.--> null값으로 바뀌는 것
    //그러나 arr1[1]을 없애고 싶을 경우,[3][]이면 null오류가 뜨기 때문에 일단 default값 0을 주는 것이 좋다 -->[3][2]형태.
    //즉, 밑에서 값을 줘버릴 경우엔 없는 것이 효율적. 선언을 해놓고 특정 부분만 바꿔서 출력하고 싶다면 있는 것이 문제 없다.
    		arr1[0]=new int[]{1,2};
    		arr1[1]=new int[]{6,7,8,9};    // int 배열만 들어가면 되니까 배열의 사이즈가 2라는 보장이 없다. 
    		arr1[2]=new int[]{1,2,3};
    		
    		
    		for(int i=0; i<arr1.length; i++){
    			int[] temp=arr1[i];
    			for(int j=0; j<temp.length; j++){
    				System.out.print(temp[j]+"\t");
    			}
    			System.out.println();
    		}
    	}
    }