반응형

[광고 누르면 오늘의 행운 상승!!]

같은 타입의 많은 데이터를 하나의 이름으로 관리하고 메모리를
한번에 할당하기 위해 배열을 사용한다.

1차원 배열

	//선언
	int[] ia;
	//생성
	ia = new int[3];
	//1+2
	
	int [] ia2 = new int[3];
	
	ia[0] = 10;
	ia[1] = 11;
	ia[2] = 12;
	// ia[3] = 12; //java.lang.ArrayIndexOutOfBoundsException
	System.out.println(ia.length);
	
	int[] iaa = {10,11,12};
	int[] iaa2 = new int[]{10,11,12};
	System.out.println(Arrays.toString(ia));
	
	
	System.out.println(Arrays.toString(ia));
	for(int n :ia) {
		System.out.println(n+ " ");
	}

배열의 길이

int len = arr.length; //배열 길이, 함수 X
  • 힙에 메모리 할당한 후, 0번째 주소 스택에 저장

1차원 배열 복사 (Array Copy)

//소스배열, 시작위치, 목적배열, 시작위치, 복사할 길이
System.arraycopy(ia,0,ca,0,ia.length);
//소스배열, 길이
ca=Arrays.copyOf(ia, ia.length);

ca=ia.clone();
	
깊은복사 3종세트 
셋다 같은 역할을 한다.

2차원 Array

행과 열을 이용하여 데이터를 저장, 이용하기 위해 사용
2차원 배열은 1차원 배열의 1차원 배열
3차원 배열은 2차원 배열의 1차원 배열

public static void main(String args[]) {
	//int[][] ia; // int ia[][]; 가능 // int[] ia[]; 도 가능
	
	//ia = new int[3][];
	
	int[][] ia = new int[3][3];
	ia[0][0] = 10;
	ia[1][1] = 11;
	ia[2][2] = 12;
    //ia[3][0] = 13; //java.lang.ArrayIndexOutOfBoundsException
    //ia[-1][0] = -1;//java.lang.ArrayIndexOutOfBoundsException
    
	System.out.println(ia.length);
	System.out.println(ia[0].length);
	
	int[][] ia2 = {{10,0,0},
			       {0,11,0},
			       {0,0,12}};
	
	for(int[] a:ia2) System.out.println(Arrays.toString(a));
	
	
	for(int i=0; i<ia2.length; i++) {
		for(int j=0; j<ia2[i].length; j++){
			System.out.println(ia2[i][j] + " ");
		}
	}
	
	for(int[] a : ia2) {
		for(int n : a ){
			System.out.println(n+ " ");
		}
	}
}

2차원 배열 복사

2차원 배열은 요소별로 데이터를 넣어주어야 한다. 1차원 배열처럼

복사를 시도하면 실패한다.

	int[][] ia3 = {{10,0,0},
		          {0,11,0},
		          {0,0,12}};

	int [][] ca = new int[ia3.length][];
	for(int i =0; i< ia.length; i++) {
		//ca[i] = new int[ia[i].length];
		//System.arraycopy(ia[i], 0, ca[i],0 , ia[i].length);
		
		ca[i] = Arrays.copyOf(ia[i], ia[i].length);
		ca[i] = ia[i].clone();
	}
	// ca= ia;// 작동안함 그외 3개도 작동안함
	
	for(int i=0; i<ia2.length; i++) {
		ca[i] = new int[ia2[i].length];
		for(int j=0; j<ia2[i].length; j++){
			ca[i][j] = ia2[i][j];
		}
	}

C, C++과의 차이점

C/C++와는 달리 항상 동적으로 할당 → 동적 할당이기 때문에 heap에 할당
별도의 반환이 필요없이 제거되거나 재할당되면 GC에서 알아서 반환

Default 초기화

정수형 0
실수형 0.0
논리형 false
객체 null

반응형

'3. 자바 > 1. 자바의 특징' 카테고리의 다른 글

컴파일 과정  (0) 2020.03.02
자바의 특징  (0) 2020.03.02
변수, 구조체, 클래스  (0) 2020.03.02
메모리 호출 순서  (0) 2020.03.02
상속(Inheritance)  (0) 2020.03.02

+ Recent posts