반응형

           

  JAVA Study






1. 배열(array) 
 

- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것


- 저장공간이 연속적으로 배치되어 있음


- 배열의 선언

: 원하는 타입의 변수를 선언하고 대괄호를 붙임 ( ex. int[] arr;  int arr[]; )


- 배열의 생성

: 연산자 'new'와 함께 배열의 타입과 길이 지정 ( ex. int[] arr = new int[5]; )


배열의 요소 : 생성된 배열의 각 저장공간


- 인덱스

: 배열의 요소마다 붙여진 일련번호, 0부터 '배열길이-1'까지 

: 인덱스로 상수 대신 변수나 수식도 사용가능하다

for(int i=0; i<5; i++) {

score[i] = i*10;

 }

: 인덱스 범위를 벗어난 값을 인덱스로 사용하면 실행 시 에러 발생


- 배열의 길이

: 배열의 요소개수, 저장 가능한 공간의 개수

: 양의 정수로 작성해야 함

: 길이가 0인 배열 생성 가능


- 배열이름,length

: JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해 배열 길이 정보를 얻을 수 있음

: 배열은 생성 후 길이변경이 안되므로 '배열이름.length'는 상수


- 배열 길이 변경

: 배열에 저장공간이 부족할 경우 더 큰 길이의 새로운 배열 생성 후 기존배열의 값을 복사

: 기존 배열길이의 2배 정도의 길이로 생성하는 것이 유용


- 배열의 초기화

: 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화 됨     ( 변수 타입 별 기본값 확인하기 http://keepitupjk.tistory.com/231 )


: 배열의 생성과 초기화를 동시에 한 예

int[] score = new int[] {5,6,7,8,9}; 

int[] score = {5,6,7,8,9};  (new int[] 생략 가능)


: 매개변수로 배열을 받는 메서드를 호출할 경우 'new int[]'를 생략할 수 없음

int add( int[] arr ) { 메서드 내용  }

int result = add ( new int[] {1,2,3,4,5} );


- 배열의 출력

: Arrays.toString(배열이름)' 메서드 사용

int[] Arr = {1,2,3,4,5};

System.out.println( Arrays.toString (Arr) );  ( 타입@주소 형식으로 출력 )


char[] chArr={'a','b','c'};

System.out.printlnArrays.toString (chArr) ); (abc 출력) 


- 배열의 복사

: 기존 배열길이의 두배 긴 배열 생성 후 내용 복사

int [] arr = new int [5];


int[] tmp = new int [arr.length * 2];     (기존 보다 2배 긴 배열 생성)


for(int i=0; i < arr.length; i++) {

tmp [i] = arr[i];    (arr[i]의 값을 tmp[i]에 저장)

}

arr = tmp;    (참조변수 arr이 새로운 배열을 가리키게 함

: System.arraycopy()를 이용해 지정된 범위의 값을 한번에 통째로 복사

System.arraycopy ( arr, 0 , tmp, 0, num.length);   (num[0] 에서 tmp[0]으로 num.length개 만큼 복사)


- 버블정렬 알고리즘 (bubble sort)

: 크기 순으로 배열 정렬

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


changed = false;  // 매 반복마다 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; // 자리바꿈 발생 시 true변환

}

}


if (!changed) break; // 자리바꾸면 반복문 탈출


for (int k =0; i<numArr.length; k++) {

System.out.print(numArr[k];  //정렬 결과 출력

System.out.println();

}



2. String배열
 

- String 배열 생성

String[] name = new String[3];


- String 배열 초기화

String[] name = new String[3];

name[0] = "kim";

name[1] = "Lee";

name[2] = "park";


String[] name = new String[]{"kim","Lee","park"};

String[] name = {"kim","Lee","park"};


- 참조형 배열의 경우 객체의 주소를 배열에 저장함


- String 클래스는 char 배열에 메서드를 추가한 것


- String 객체(문자열)는 읽기만 가능, 내용변경 불가


- String 클래스 주요 메서드

 메서드

설명 

char charAt(int index) 

문자열에서 해당 위치(index)에 있는 문자 반환 

 int length()

문자열 길이 반환 

String substring(int from,int to) 

문자열에서 해당범위(from~to바로 앞까지) 문자열 반환 

 boolean equals(String str)

문자열 내용이 같은지 확인, 같으면 true, 다르면 false 

char[] toCharArray() 

문자열을 문자배열(char[])로 변환해서 반환 


- char배열과 String 클래스의 변환

char chArr={'A','B','C'};

String str = new String(chArr);  // char -> String

char[] tmp = str.toCharArray(); // String-> char
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class tistory {
 
    public static void main(String[] args) {
        
        String  src = "ABCDE";
        
        for(int i=0; i<src.length; i++){
            char ch = src.charAt(i); // src의 i번째 문자를 ch에 저장
            System.out.println("src.charAt("+i+"):" + ch);
        }
 
        // String을 char[]로 변환
        char[] chArr = src.toCharArray();
 
        // char배열(char[])을 출력
        System.out.println(chArr);
    }
}
cs



3. 다차원 배열
 

- 2차원 배열 선언

: 타입[][] 변수이름; int[][] abc;

  int[][] abc = new int[3][5];

: 각 요소에 접근하는 방법은 'abc[행 index] [열 index]'


- 2차원 배열 초기화

: int[][] abc = {{1,2,3,4,5},{10,20,30,40,50},{100,200,300,400,500}};


- for문을 통한 2차원 배열 초기화

for(int i=0; i<abc.length; i++){ // 행 index 값

for(int j=0; j<abc[i].length; j++){ // 열 index 값

abc[i][j] = 10; //모든 값을 10으로 초기화

}

}


- 가변배열

: 다차원 배열 생성 시 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 각기 다른 길이의 배열을 생성함으로 유동적 가변배열을 구성

int[][] score = new int[5][]; // 열의 개수 설정 안함

score[0] = new int[4]; // 행 0번에 열 4개생성

score[1] = new int[3]; // 행 1번에 열 3개생성

score[2] = new int[4]; // 행 2번에 열 4개생성

score[3] = new int[2]; // 행 3번에 열 2개생성

score[4] = new int[1]; // 행 4번에 열 1개생성


int[][] score = {

{1,2,3,4}, 

{1,2,3},

{1,2,3,4},

{1,2},

{1}

};





자바의 정석 저자 강의

- 배열



반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] 6 객체지향 프로그래밍1  (0) 2017.07.05
[JAVA] 배열 예제  (0) 2017.07.04
[JAVA] 제어구조 예제 6 - while문  (0) 2017.07.02
[JAVA] 제어구조 예제 5 - for문  (0) 2017.07.01
[JAVA] 제어구조 예제 4 - switch문  (1) 2017.06.30

+ Recent posts