일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Data Structure
- hash table
- two pointers
- Binary Search
- sorting
- implement
- Tree
- Matrix
- 코테
- 파이썬
- bit manipulation
- 코딩테스트
- simulation
- java
- geometry
- Counting
- Class
- greedy
- Number Theory
- string
- SQL
- Math
- array
- dynamic programming
- Method
- 구현
- Binary Tree
- Stack
- 자바
- database
- Today
- Total
코린이의 소소한 공부노트
배열 (5) Arrays클래스 본문
Arrays클래스는 배열 관련 메서드를 모아놓은 클래스이다. 이 중 많이 쓰는 메서드 몇 가지를 보려 한다.
1. 배열의 내용을 문자열로 출력하기
1) 1차원 배열의 내용을 출력할 때 이용하는 메서드 toString()
int[] arr1d = {0, 1, 2, 3};
System.out.println(Arrays.toString(arr1d)); // [0, 1, 2, 3]
2) 2차원 이상의 배열의 내용을 출력할 때 이용하는 메서드 deepToString()
int[][] arr2d = { {00, 01}, {10, 11} };
System.out.println(Arrays.deepToString(arr2d)); // [[0, 1], [10, 11]]
// 2차원 배열에 toString()을 쓰면 어떻게 될까?
System.out.println(Arrays.toString(arr2d)); // [[I@2401f4c3, [I@7637f22]
// 각 행의 주소가 출력됨
2. 배열의 내용을 비교해보기
Arrays클래스는 등가 비교 연산자(==)를 지원하지 않는 대신 메서드를 지원한다. 만약 메서드 없이 배열의 요소 하나하나를 비교하려면 반복문을 이용해야 하는데, 다행히 그럴 필요는 없다.
1) 1차원 배열 2개의 내용을 비교하는 메서드 equals()
String[] arr1 = {"aa", "bb", "cc"};
String[] arr2 = {"aa", "bb", "cc"};
String[] arr3 = {"dd", "ee", "ff"};
// 1) equals()를 이용하여 비교
System.out.println(Arrays.equals(arr1,arr2)); // true
System.out.println(Arrays.equals(arr1,arr3)); // false
// 2) 등가 비교 연산자를 이용하여 비교
System.out.println(arr1 == arr2); // false
System.out.println(arr1 == arr3); // false
// 참조 변수는 배열 이름에 주소가 담겨 있음
// 각 배열의 주소가 다 다르기 때문에 false가 나옴
2) 2차원 이상의 배열 2개의 내용을 비교하는 메서드 deepEquals()
String[][] arr1 = { {"aa", "bb"}, {"cc", "dd"} };
String[][] arr2 = { {"aa", "bb"}, {"cc", "dd"} };
String[][] arr3 = { {"ee", "ff"}, {"gg", "hh"} };
// 1) deepEquals()를 이용하여 비교
System.out.println(Arrays.deepEquals(arr1,arr2)); // true
System.out.println(Arrays.deepEquals(arr1,arr3)); // false
// 2) 등가 비교 연산자를 이용하여 비교
System.out.println(arr1 == arr2); // false
System.out.println(arr1 == arr3); // false
// 각 배열의 주소가 다 다르기 때문에 false가 나옴
// 3) equals()를 이용하여 비교
System.out.println(Arrays.equals(arr1,arr2)); // false
System.out.println(Arrays.equals(arr1,arr3)); // false
// 2차원 배열에서 toString()을 썼을 때 주소가 나왔었다.
// equals()는 1차적인 내용(여기서는 주소)만 확인하기 때문에
// 결과는 false가 나오게 된다.
3. 배열의 내용을 복사하기
1) 맨 앞에서부터 복사하는 copyOf()
int[] arr = {0, 1, 2, 3};
// 1) 상수 length를 이용해 전체 복사하기
int[] arr1 = Arrays.copyOf(arr, arr.length); // arr1= [0, 1, 2, 3]
// 2) 복사할 요소의 개수를 지정하기
int[] arr2 = Arrays.copyOf(arr, 3); // arr2= [0, 1, 2]
// 3) 지정한 개수가 복사할 배열의 길이를 초과한다면?
int[] arr3 = Arrays.copyOf(arr, 7); // arr3= [0, 1, 2, 3, 0, 0, 0]
// 인덱스의 범위를 벗어난 요소는 0으로 채워짐
2) 중간부터 복사할 수 있는 copyOfRange()
int[] arr = {0, 1, 2, 3};
// 1) 인덱스가 x 이상 y 미만인 요소 복사하기
int[] arr1 = Arrays.copyOfRange(arr, 1, 3); // arr1= [1, 2]
// 2) 지정한 인덱스가 복사할 배열의 인덱스를 초과한다면?
int[] arr2 = Arrays.copyOfRange(arr, 2, 7); // arr2= [2, 3, 0, 0, 0]
// 인덱스의 범위를 벗어난 요소는 0으로 채워짐
4. 배열의 내용을 정렬하기
sort() 메서드를 이용하면 요소를 오름차순으로 정렬해준다.
int[] arr = {5, 9, 2, 4, 1, 0, 6, 8, 7, 3};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sort() 메서드는 새로 배열을 복사해서 정렬을 하는 것이 아니라 있는 배열을 정렬하기 때문에 반환 값이 없다(void). 따라서 sort() 메서드를 실행 후 어딘가에 저장하려고 하면 에러가 발생한다.
int[] arr1 = Arrays.sort(arr);
// Type mismatch: cannot convert from void to int[]
배열을 내림차순으로 정렬하고 싶다면 메서드에 Collections.reverseOrder() 인자를 추가하면 된다.
Integer[] arr = {5, 9, 2, 4, 1, 0, 6, 8, 7, 3};
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(Arrays.toString(arr));
// [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
지금까지 봤던 것과의 차이점은 arr를 선언할 때 int가 아닌 Integer로 타입을 쓴 것이다. 이와 관련된 것은 추후 설명 예정이니, 지금은 그냥 받아들이자.
'Java' 카테고리의 다른 글
클래스, 객체, 인스턴스 (0) | 2022.02.20 |
---|---|
객체지향 언어의 도입 배경과 특징 (0) | 2022.02.20 |
String 클래스 (0) | 2022.02.06 |
배열 (4) 2차원 배열 (0) | 2022.01.24 |
배열 (3) 활용 예시 (0) | 2022.01.20 |