본문 바로가기
JAVA BASE/Collection(컬렉션) - 자료구조

07. [자바] Arrays

by staticClass 2021. 1. 4.

Arrays

배열이 편하긴 하지만 가끔 사용하기 너무 복잡하게 느껴질때가 있다.
Arrays클래스에는 배열을 편하게 다룰수 있게 도와주는 유용한 메소드가 있다.

 

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

메소드 설 명
Arrays.copyOf(char[] arr, int length);
Arrays.copyOf(short[] arr, int length);

Arrays.copyOf(int[] arr, int length);
           
Arrays.copyOf(double[] arr, int length);
Arrays.copyOf(Object[] arr, int length);
int length 까지의 내용을 복사한다.
Arrays.copyOfRange(arr, int begin, int end); int begin부터 int end까지의 내용을 복사한다.
int[] arr = {0, 1, 2, 3, 4};
int[] copy1 = Arrays.copyOf(arr, arr.length); // copy1 = [0, 1, 2, 3, 4]
int[] copy2 = Arrays.copyOf(arr, 3);          // copy2 = [0, 1, 2]
int[] copy3 = Arrays.copyOf(arr, 7);          // copy3 = [0, 1, 2, 3, 4, 0, 0]
int[] copy4 = Arrays.copyOfRange(arr, 2, 4);  // copy4 = [2, 3]
int[] copy5 = Arrays.copyOfRange(arr, 0, 8);  // copy5 = [0, 1, 2, 3, 4, 0, 0, 0]

 

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

메소드 설 명
Arrays.fill(arr, value) 배열의 모든 요소를 지정된 value로 채운다.
Arrays.setAll(arr, () -> (int)(Math.random()*5)+1); 배열을 채우는데 사용할 함수형 인터페이스를
매개변수로 받는다.
int[] arr = new int[5];

Arrays.fill(arr, 9);
System.out.println(Arrays.toString(arr));	// [9, 9, 9, 9, 9]

Arrays.setAll(arr, i->(int)(Math.random()*5)+1);
System.out.println(Arrays.toString(arr));	// [5, 1, 5, 5, 3]

 

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

메소드 설 명
Arrays.sort(arr) 배열을 정렬한다.
Arrays.binarySearch(arr, Object key) 배열에서 key가 저장된 위치를 찾아 반환한다.
반드시 sort()로 정렬한 후에 실행해야 올바른 값이 나온다.
int[] arr = {5 ,3, 2, 0, 1, 4};
int index = Arrays.binarySearch(arr, 5);
System.out.println(index); // -7 잘못된 결과가 반환됨

Arrays.sort(arr);
index = Arrays.binarySearch(arr, 5);
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4, 5]
System.out.println(index); // 5 올바른 결과가 반환됨

String[] strArr = {"cat", "Dog", "lion", "tiger"};

Arrays.sort(strArr); // String의 COmparable구현에 의한 정렬
System.out.println("strArr = " + Arrays.toString(strArr));
//strArr = [Dog, cat, lion, tiger]

Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분 안함;
System.out.println("strArr = " + Arrays.toString(strArr));
//strArr = [cat, Dog, lion, tiger]

Arrays.sort(strArr, Comparator.reverseOrder());  // 역순으로 정렬
System.out.println("strArr = " + Arrays.toString(strArr));
//strArr = [tiger, lion, cat, Dog]

 

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

메소드 설 명
Arrays.toString(arr) 배열의 모든 내용을 문자열로 출력해준다.
Arrays.deepToString(arr) 다차원 배열의 모든 내용을 문자열로 출력해준다.
Arrays.equals(arr1, arr2) 두 배열에 저장된 모든 내용을 비교해서
같으면 true 다르면 false를 반환한다.
Arrays.deepEquals(arr1, arr2) 두 배열에 저장된 모든 내용을 비교해서 같으면 true 다르면 false를 반환한다.
다차원 배열의 비교에 사용된다.
int[] arr1 = {0, 1, 2, 3, 4};
int[] arr2 = {0, 1, 2, 3, 4};

int [][] deepArr1 = {{9, 8}, {4, 0}};
int [][] deepArr2 = {{9, 8}, {4, 0}};
int [][] deepArr3 = {{9, 8}, {4, 0}, {1}};

System.out.println(Arrays.toString(arr1)); // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(deepArr1)); // [[9, 8], [4, 0]]

System.out.println(Arrays.equals(arr1, arr2)); // true
System.out.println(Arrays.deepEquals(deepArr1, deepArr2)); // true
System.out.println(Arrays.deepEquals(deepArr1, deepArr3)); // false

 

배열 List로 변환 - asList()

메소드  설 명
Arrays.asList(arr) 배열을 List에 담아서 반환한다.
Integer[] arr = {1,2,3,4,5};
List list1 = Arrays.asList(arr);                        // list1 = [1, 2, 3, 4, 5]
List list2 = Arrays.asList(new Integer[] {6,7,8,9,10}); // list2 = [6, 7, 8, 9, 10]
List list3 = Arrays.asList(10,9,8,7,6);                 // list3 = [10, 9, 8, 7, 6]

list1.add(65);  // UnsupportedOperationException 발생
list1.set(0, 5); // set은 추가, 삭제가 아니고 변경이기 때문에 가능함

// 위의 코드는 list내용을 추가나 삭제하지 못한다
// list의 크기를 바꾸고 싶다면 아래와 같이 작성하자

List list4 = new ArrayList(Arrays.asList(arr)); // [1, 2, 3, 4, 5]
list4.add(6); // [1, 2, 3, 4, 5, 6]

 

댓글