티스토리 뷰
728x90
서문
자바의 정석 기초편 챕터 5편을 기재합니다.
목적은 공부한 내용을 기록하는 것에 있기 때문에 완전한 문장이 아닐 수도 있습니다.
- 참고 자료
자바의 정석 ( CH.5 )
배열
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
int score1, score2, score3, score4, score5;
int[] scores = new int[5]; // 연속적인 공간에 score들을 붙여서 사용
배열의 선언
- 배열을 다루기 위한 참조변수가 만들어짐
- 선언 후 new 를 통해 배열을 생성해야함
- 선언과 동시에 배열의 공간을 생성할 수 있음
선언방법 | 선언 예 |
---|---|
타입[] 변수이름; | int[] score; |
타입 변수이름[]; | int score[]; |
int[] score; // 배열을 참조변수로 선언
score = new int[5]; // int 타입의 값 5개가 저장될 공간 생성
int[] score = new int[5]; // 배열 선언과 동시에 공간생성 가능
배열의 인덱스
- 배열의 각 요소에 자동으로 붙는 일련번호
- 인덱스(index)는 0에서 시작
int[] score = new int[5]; // score[0], score[1], score[2], score[3], score[4];;
배열의 길이
- 배열이름.length, int형 상수
- 배열의 길이는 한번 생성되면 실행하는 동안에 그 길이를 바꿀 수 없음
int[] arr = new int[5]; // 배열 길이가 5인 배열 생성
배열의 초기화
- 배열의 각 요소에 처음으로 값을 저장하는 것
int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
int[] arr = new int[]{10,20,30,40,50}; // new int[] 생략 가능
int[] arr = {10,20,30,40,50}; // new int[] 생략 가능
int[] arr;
arr = {10,20,30,40,50} // error, new int[] 생략 불가능
배열의 출력
int[] iArr = {10,20,30,40,50};
System.out.println(iArr); // [배열주소] 가 출력됨
char[] chArr = {'a','b','c'};
System.out.println(chArr); // a,b,c가 출력됨, 문자는 println으로 출력 가능
for (int i=0; i<=iArr.length; i++){ // for문을 통해 직접 요소에 접근하여 출력
System.out.println(iArr[i]);
}
System.out.println(Arrays.toString(iArr)); //[10,20,30,40,50]으로 출력
String(참조형) 배열의 선언과 생성
String[] strArr = new String[3]; // 참조형(주소를 저장),3개의 문자열을 담을 수 있는 배열을 생성
strArr[0] = "wi";
strArr[1] = "kim";
strArr[2] = "park"
String[] strArr2 = {"wi", "kim", "park"};
2차원 배열
- 테이블 형태의 데이터를 저장하기 위한 배열
- int[][] score = new int[4][3]; row, col
- 1차 배열의 배열이 2차원 배열
국어 | 수학 | 영어 | |
---|---|---|---|
1 | 100 | 100 | 100 |
2 | 20 | 100 | 95 |
3 | 50 | 80 | 90 |
4 | 80 | 60 | 100 |
int[][] arr = new int[][]{{1,2,3}, {4,5,6}};
int[][] arr2 = {
{1,2,3},
{4,5,6}
} // arr[2][3], arr[0][0]은 1
String 클래스
- String 클래스는 char[]와 메서드를 결합한 것
- String class = char[] + 메서드
- String 클래스는 내용을 변경할 수 없다 (read only)
String a = "a";
String b = "b";
a = a + b; // 기존에 있던 a의 값은 변경되지 않고 a가 참조하는 공간이 달라지고 결과값이 거기에 새로 저장된다. 즉 참조 주소값만 바뀜
String 클래스의 주요 메서드
메서드 | 설명 |
---|---|
char charAt(int index) | 문자열에서 해당위치(index)에 있는 문자를 반환 |
int length() | 문자열의 길이를 반환 |
String substring(int from, int to) | 문자열에서 해당하는 범위의 문자열을 반환(to는 포함하지 않음), 만약 to를 생략하면 문자열 끝까지 반환 |
boolean equals(Object obj) | 문자열의 내용이 같은지 확인, 같으면 true 다르면 false |
char[] toCharArray() | 문자열을 문자배열(char[])로 변환하여 반환 |
String str = "abcde";
char ch = str.charAt(3); // 문자열 str에서 인덱스 3에 해당하는 d문자를 ch에 저장
System.out.print(ch);
> d
String str = "abcde";
str.length(); // 5
> 5
String str = "abcde";
String tmp = str.substring(1,4); // str에서 index범위로 1~4의 문자 반환, 이때 4는 포함하지 않음,
> "bcd"
String str = "yes";
boolean result = str.equals("yes");
System.out.print(result);
> true
String str = "abcde";
char[] ch = str.toCharArray();
Arrays로 배열 다루기
- 배열 비교 - equals(), toString()(1차원배열), deepToString()(2차원배열)
int[] arr = {0,1,2,3,4};
int[][] arr2d = {
{0,1,2},
{3,4,5}
};
int[][] arr2d2 = {
{0,1,2},
{3,4,5}
};
String[][] str2d = new String[][]{{"aaa","bbb"},{"ccc","ddd"}};
String[][] str2d2 = new String[][]{{"aaa","bbb"},{"ccc","ddd"}};
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.deepToString(arr2d));
System.out.println(Arrays.equals(str2d,str2d2)); // false, 2차원 이상의 비교는 deepEquals()로
> false
System.out.println(Arrays.deepEquals(str2d,str2d2)); // true
> true
copyOf(), copyOfRange()
- 배열을 복사
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr의 얼마나 복사할 것인가
> arr2 = [0,1,2,3,4]
int[] arr3 = Arrays.copyOf(arr, 3); // 인덱스 3까지인데 3은 포함하지 않음
> arr3 = [0,1,2]
int[] arr4 = Arrays.copyOf(arr, 7); // 원래 arr보다 길게 copy한다면
> arr4 = [0,1,2,3,4,0,0] // 0으로 채움
int[] arr5 = Arrays.copyOfRange(arr, 2, 4) // from to, to는 포함하지 않음
> arr5 = [2,3]
int[] arr6 = Arrays.copyOfRange(arr,0,7)
> arr6 = [0,1,2,3,4,0,0];
sort()
- 배열을 정렬
int[] arr = {3,2,0,1,4};
Arrays.sort(arr); // default가 오름차순
> [0,1,2,3,4]
- 자바의 정석 챕터 5에서는 배열에 대해 배웠습니다.
댓글