JAVA

[JAVA #5] 4. 배열(Array), 5. 2차원 배열

lyndaa 2023. 2. 25. 19:10
  • 배열
    • 같은 자료형의 변수를 하나의 묶음으로 다루는 것
    • 배열은 저장된 값마다 인덱스 번호가 0부터 시작하여 설정
  • 배열 선언과 할당
    • 배열 선언
      • 자료형[] 배열명;
      • 자료형 배열명[];
    • 배열 할당
      • 자료형[] 배열명 = nw 자료형[배열크기];
      • 자료형 배열명[] = nw 자료형[배열크기];
    • 배열 저장구조
      • 배열은 참조 변수로 Heap영역에 할당되며 배열 공간의 주소를 저장
      • 배열 공간의 주소를 이용해 인덱스를 참조하는 방식으로 값 처리
    • 배열 초기화
      • 인덱스를 이용한 초기화
      • for문을 이용한 초기화
      • 선언과 동시에 초기화
    • 배열 복사
      • 얕은 복사
        • 객체의 주소값만 가져와 참조형 변수에 저장하고 하나의 객체를 두변수가 참조하는 것
        • e.g.
          • int[] arr1 = nex int[4];   int[] arr2 = arr1;
      • 깊은 복사
        • 새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사하는 것
        • e.g.
          • for(int i=0; i<arr1.length; i++){
                 arr2[i] = arr1[i];
            }
          • System.arraycopy(arr1,0,arr2,0,arr1.length);
          • arr2 = Arrays.copyOf(arr1, arr1.length);
          • arr2 = arr1.clone();

* 배열 복사 실습

package com.test01;

public class ArrayTest02 {
	public String prn(int[] iarr) {
		//정수 배열 받아 배열에 저장된 값들을 String으로 값 반환
		
		String str = "";
		for(int i=0; i<iarr.length; i++) {
			str+= iarr[i]+" ";
			
		}
		//System.out.println("prn의 hashcode : "+iarr.hashCode());
		return str;
	}
	public void shallowCopy() {
		//얕은 복사
		int[] oArr = {1,2,3,4,5};
		int[] cArr = oArr;
		
		System.out.println("1.oArr : " + prn(oArr));
		System.out.println("1.cArr : " + prn(cArr));
	}
	//깊은 복사
	public void deepCopy1() {
		//1. 동일한 배열을 새로 하나 생성하여 값을 복사
		int[] oArr = {1,2,3,4,5};
		int[] cArr = new int[5];
		
		//for문을 이용해서 값을 1:1 복사
		for(int i=0; i<oArr.length; i++) {
			cArr[i]=oArr[i];
		}
	}
	public void deepCopy2() {
		//2. arraycopy() 사용
		int[] oArr = {1,2,3,4,5};
		int[] cArr = new int[10];
		
		//arraycopy(src,srcPos,dest,destPos,length);
		//src : 원본배열 srcPos:복사 시작 위치
		//dest : 카피배열 destPos : 붙여넣기 시작위치
		//length : 복사할 길이
		System.arraycopy(oArr, 0, cArr, 2, oArr.length);
		
		System.out.println("oArr : " + prn(oArr));
		System.out.println("cArr : " + prn(cArr));
		
		//3. clone(

		//시작인덱스 등의 설정이 불가능, 원본배열을 통째로복사해 새로운 배열을 할당
		int[] cArr2 = new int[10];
		
		System.out.println(cArr2.hashCode());
		
		cArr2 = oArr.clone();
		
		System.out.println(cArr2.hashCode());
		System.out.println("cArr2 : " + prn(cArr2));
		
		
	}
}

 

  • 2차원 배열
    • 자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열 존재
    • 2차원 배열은 할당된 공간마다 인덱스 번호 두개 부여 (앞 번호는 행, 뒷 번호는 열 [0][0])
  • 2차원 배열 선언과 할당
    • 배열 선언
      • 자료형[][] 배열명;
      • 자료형 배열명[][];
      • 자료형[] 배열명[];
    • 배열 할당
      • 자료형[][] 배열명 = new 자료형[행크기][열크기];
      • 자료형 배열명[][] = new 자료형[행크기][열크기];
      • 자료형[] 배열명[] = new 자료형[행크기][열크기];

'JAVA' 카테고리의 다른 글

[JAVA 실습 #5] 5. 2차원 배열  (0) 2023.02.26
[JAVA 실습 #5] 4. 배열(Array)  (0) 2023.02.25
[JAVA 실습 #4] 4. 제어문(2)_반복문  (0) 2023.02.23
[JAVA 실습 #3] 4. 제어문_조건문  (0) 2023.02.23
[JAVA #3, #4] 4. 제어문  (0) 2023.02.23