본문 바로가기

프로그래밍/JAVA

[ JAVA ] Arrays

Arrays클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다.

1. 배열의 복사 - copyOf(), copyOfRange()

copyOf(복사할 원본 배열, 복사할 길이) : 지정한 배열을 인덱스 0부터 원하는 길이만큼 복사한다.
copyOfRange(복사할 원본 배열, 복사를 시작할 인덱스, 복사를 끝낼 인덱스) : 지정한 배열에서 특정 범위만큼의 요소들을 복사해 새로운 배열로 반환한다. 지정된 범위의 끝은 포함되지 않는다.
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length);  // arr2 = [0,1,2,3,4]
int[] arr3 = Arrays.copyOf(arr, 3);           // arr3 = [0,1,2]
int[] arr4 = Arrays.copyOf(arr, 7);           // arr4 = [0,1,2,3,4,0,0]
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);   // arr5 = [2,3] <- 4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);   // arr6 = [0,1,2,3,4,0,0]

2. 배열 채우기 - fill(), setAll()

fill() : 배열의 모든 요소를 지정된 값으로 채운다.
setAll() : 배열을 채우는데 함수형 인터페이스를 구현한 객체 또는 람다식을 매개변수로 받는다.
int[] arr = new int[5];
Arrays.fill(arr, 9);   // arr = [9,9,9,9,9]
Arrays.setAll(arr, () -> (int)(Math.random()*5)+1); // arr = [1,5,2,1,1]

3. 배열의 정렬과 검색 - sort(), binarySearch()

sort() : 배열을 정렬할 때 사용한다.
binarySearch() : 배열에 저장된 요소를 검색하여 그 위치를 반환한다. 반드시 배열이 정렬된 상태이어야 올바른 결과를 얻으며, 만약 검색한 값과 일치하는 요소들이 여러 개 있다면, 어떤 것의 위치가 반환될지 알 수 없다.
int[] arr = {3,2,0,1,4};
int idx =Arrays.binarySearch(arr, 2);    // idx = -5 <- 잘못된 결과

Arrays.sort(arr);  // 배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
int idx =Arrays.binarySearch(arr, 2);    // idx = 2 <- 올바른 결과

4. 문자열의 비교와 출력 - equals(), toString()

equals() : 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 false를 반환한다. 일차원 배열에만 사용 가능하므로 다차원 배열의 비교에는 deepEquals()를 사용해야 한다.
toString() : 배열의 모든 요소를 문자열로 출력한다. 일차원 배열에만 사용할 수 있으며, 다차원 배열에는 deepToString()을 사용해야 한다.
// equals()
String[][] str2D = new String[][]{{"aaa","bbb"}, {"AAA","BBB"}};
String[][] str2D2 = new String[][]{{"aaa","bbb"}, {"AAA","BBB"}};

// -> 다차원 배열을 equals()로 비교하면 배열에 저장된 배열의 주소를 비교하기 때문에 false가 반환된다.
System.out.println(Arrays.equals(str2D, str2D2));      // false
System.out.println(Arrays.deepEquals(str2D, str2D2));  // true


// toString()
int[] arr = {0,1,2,3,4};
int[][] arr2D = {{11,12}, {21,22}};

System.out.println(Arrays.toString(arr));       // [0,1,2,3,4]
System.out.println(Arrays.deepToString(arr2D)); // [[11, 12], [21, 22]]

5. 배열을 List로 변환 - asList(Object... a)

▶ 배열을 List에 담아서 반환한다. 매개변수의 타입이 가변인수라서 배열 생성 없이 저장할 요소들만 나열하는 것도 가능하다. 
▶ asList()가 반환한 List는 저장된 내용 변경은 가능하지만 List의 크기는 변경할 수 없다. 즉, 추가 또는 삭제가 불가능하다.
※ 크기를 변경할 수 있는 List를 얻는 방법
ex) List list = new ArrayList(Arrays.asList(1,2,3,4,5));
List list = Arrays.asList(new Integer[]{1,2,3,4,5}); // list = [1,2,3,4,5]
List list = Arrays.asList(1,2,3,4,5);                // list = [1,2,3,4,5]
list.add(6); // UnsupportedOperationException 예외 발생

6. parallelXXX(), spliterator(), stream()

parallelXXX() : 'parallel'로 시작하는 이름의 메서드들은 빠른 결과를 얻기 위해 여러 쓰레드가 작업을 나누어 처리하도록 한다.
spliterator() : 여러 쓰레드가 처리할 수 있게 하나의 작업을 여러 작업으로 나누는 Spliterator를 반환한다.
stream() : 컬렉션을 스트림으로 변환한다.

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

[ JAVA ] 지네릭스(Generics) - ②  (0) 2023.02.06
[ JAVA ] 지네릭스(Generics) - ①  (0) 2023.02.06
[ JAVA ] Iterator, ListIterator, Enumeration  (0) 2023.01.08
[ JAVA ] Queue(큐)  (0) 2023.01.08
[ JAVA ] Stack(스택)  (0) 2023.01.07