JavaStudy Chap. 5

Java의 정석 챕터5 배열

  • 배열 : 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것, 각 저장공간이 연속적으로 배치되어 있다
  • 배열의 선언 == 배열을 다루기 위한 참조변수의 선언
타입[] 변수이름  :  int[] score;
타입 변수이름[]  :  int score[];

- 배열의 생성

변수이름 = new 타입[길이];
  • 생성과 선언 동시에
타입[] 변수이름 = new 타입[길이];  

: 해당 타입, 길이의 배열을 생성하고 참조변수가 이를 가리킨다
: 이 때 초기화도 동시에 한다면 new 타입[]을 생략할 수 있다.

  • 배열의 원소에 대한 접근은 인덱스를 통해 한다
    : 인덱스의 범위는 ( 0 ~ 길이-1 )
    , 배열의 크기를 벗어나는 인덱스에 접근할 경우 실행에러 발생
    ( ArrayIndexOutOfBoundsException )
  • 배열의 길이
    : int 범위의 양의 정수 ( 0 포함 )
    , 배열의 길이는 변경 불가능
    : 배열이름.length -> 배열길이 얻을 수 있음

- 배열의 출력

  1. for문을 이용
int[] arr = {1,2,3,4,5,6};
        for(int i=0;i<arr.length;i++) {
            System.out.printf(arr[i]+" ");
        }
  1. Arrays.toString(배열이름) 메소드 사용
        System.out.println(Arrays.toString(arr));

: Arrays.toString()은 배열의 모든 요소를
'[ 요소1, 요소2, 요소3, ... ]' 형태의 문자열로 반환한다.


- 배열의 복사

  1. for문을 이용
    1. 기존배열보다 큰 배열 새로 생성
    2. for문을 사용해 모든 원소를 새 배열에 대입
    3. 기존배열의 참조변수가 새 배열 가리키게 함
  1. System.arraycopy() 사용

    System.arraycopy(src, srcPos, dest, destPos, length)

    • src : 복사하려는 원본 / srcPos : 원본의 어느위치부터 읽어올지
    • dest : 복사 목적지가 되는 배열 / destPos : 복사를 시작할 위치
    • length : 복사 할 데이터의 길이

- 배열의 활용

  • 정렬하기
public static void main(String args[]) {
       int[] numArr = new int[10];

       //임의의 수 저장
       for( int i=0 ; i< numArr.length ; i++) {
           numArr[i] = (int)(Math.random()*10);
           System.out.print(numArr[i]);
       }
       System.out.println();

       for(int i=0;i<numArr.length-1;i++) {
           boolean Changed = false;

           for( int j=0;j<numArr.length-1-i;j++) {
               if(numArr[j]>numArr[j+1]) {
                   int tmp = numArr[j];
                   numArr[j] = numArr[j + 1];
                   numArr[j + 1] = tmp;
                   Changed = true;
               }
           }
           if(!Changed) break;
       }

       for(int k=0;k<numArr.length;k++) {
           System.out.print(numArr[k]);
       }
       System.out.println();



    }

- String 배열

String배열은 기본형배열이 아닌, 객체의 주소가 저장 돼 있는 참조형 배열이다.

- String 클래스

  • String 클래스의 주요 메소드
    | charAt( int index ) : 문자열에서 해당 위치의 문자 반환
    | substring(int from, int to ) : from에서 to까지의 문자열 반환
    | equals( Obj ) : 문자열 내용의 비교
    | toCharArray() : 문자열을 문자배열로 변환

- 커맨드 라인을 통해 입력받기

프로그램 실행 시, 클래스명 뒤에 공백으로 구분한 여러개의 문자열을 String 배열로 전달 할 수 있음
-> 클래스의 main메소드의 매개변수인 args에 전달 됨!
-> 이는 String 배열이므로 args[index] 형태로 접근 가능


- 다차원 배열

2차원 배열은 '배열의 배열' 형태로 구성되어 있다.
"각 행을 가리키는 참조변수들의 배열 형태"
→ arr.length 는 행의 개수를 반환 / arr[i].length 가 열의 개수를 반환

2차원배열의 각 원소에 접근하려면 이중for문 사용

for( int[] tmp : score ) {  //배열의 1차원( 행의 주소 가리키는 참조변수 )
	for( int i : tmp ) {  // 배열의 2차원( 각 원소 )
    	sum+=i;
    }
}

- 가변배열

자바에서의 다차원배열은 '배열의 배열' 형태이기 때문에
각 행마다 길이가 다른 유동적인 배열을 생성할 수 있다.

int[][] score = new int[4][]  // 두번째 차원의 길이를 미정으로 남기기
score[0] = new int[4];  //각 행마다 길이 다름
score[1] = new int[1];
score[2] = new int[3];
score[3] = new int[5];

꼭 이렇게 따로따로 생성하지 않아도 된다.
생성과 초기화를 동시에 하는 것도 가능하기 때문

int[][] score = {
					{1,2,3}
                    , {10,10,10,10,10]
                    , {200,300]
                 };

좋은 웹페이지 즐겨찾기