java Arrays

조항주·2022년 6월 5일

study

목록 보기
13/20
post-thumbnail

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

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

copyOf()는 배열 전체를, copyOfRange()는 배열의 일부를 복사해서 새로운 배열을 만들어 반환한다.

int[] intArr1 = {1, 2, 3};
int[] intArr2 = Arrays.copyOf(intArr1, 2);
int[] intArr3 = Arrays.copyOf(intArr1, 5);
int[] intArr4 = Arrays.copyOfRange(intArr1, 0, 3);
int[] intArr5 = Arrays.copyOfRange(intArr1, 0, 5); 
System.out.println(Arrays.toString(intArr2));// [1, 2]
System.out.println(Arrays.toString(intArr3)); // [1, 2, 3, 0, 0]
System.out.println(Arrays.toString(intArr4)); // [1, 2, 3]
System.out.println(Arrays.toString(intArr5)); // [1, 2, 3, 0, 0]

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

fill()은 배열의 모든 요소를 지정된 값으로 채운다. setAll()은 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다. 이 메서드를 호출할 때는 함수형 인터페이스를 구현한 객체를 매개변수로 지정하던가 아니면 람다식을 지정해야한다.

int[] FillArr = {1,2,3};
Arrays.fill(FillArr, 5); //[5,5,5]

int[] SetArr = {1,2,3,4};
Arrays.setAll(SetArr, (i) -> (int)(Math.random()*10) + 1);
System.out.println(Arrays.toString(SetArr));

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

sort()는 배열을 정렬할 때, 그리고 배열에 저장된 요소를 검색할 때는 binarySearch()를 사용한다. binarySearch()은 배열이 정렬되어 있어야하고 일치하는 요소가 여러개 있을 경우 어떤 것의 위치가 반환되는지 알 수 없다는 단점이 있다

int [] arr = {3,2,-,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 <-- 올바른 결과

indexOf?

자바 배열에서는 indexOf()를 지원하지 않고 ArrayList자료구조에서만 지원하므로 asList()를 통해 변환시켜 인덱스를 구해야 한다.

import java.util.Arrays;

public class IndexOfTest {
    public static void main(String[] args) {
		String[] arr = {"a","b","c"};
		System.out.println(Arrays.asList(arr).indexOf("b")); //1이 출력된다.
}

배열의 비교와 출력 - equals(), toString()

equals()는 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 false를 반환한다.
일차원 배열에만 가능하고 deepEquals()를 사용하면 다차원 배열의 비교가 가능하다

String[][] str2D = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
String[][] str2D2 = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};

System.out.println(Arrays.equals(str2D, str2D2));     // false
System.out.println(Arrays.deepEquals(str2D, str2D2);  // true

toString()배열의 모든 요소를 문자열로 편하게 출력할 수 있다. deepToString()를 사용하면 다차원 배열에도 동작한다.

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]]

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

asList()는 배열을 List에 담아서 반환한다.

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);                 // lsit =[1,2,3,4,5]
list.add(6); // UnsupportedOperationException 예외 발생

asList()가 반환한 List의 크기를 변경할 수 없다. 저장된 내용은 변경이 가능하지만 추가 또는 삭제가 불가능하다.
만일 크기를 변경하고 싶다면

List list = new ArrayList(Arrays.asList(1,2,3,4,5));

0개의 댓글