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.println( Arrays.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 |