Java Arrays 클래스

I C-AN·2021년 8월 14일
0

Java

목록 보기
23/26
post-thumbnail

Arrays

Arrays 클래스에는 배열을 유용하게 다룰 수 있는 메서드들이 정의되어 있다. 정의된 메서드는 모두 static 메서드이다.

Arrays의 메서드

배열의 복사

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.copyOfRange(arr, 2, 4); // arr4 = [2,3]
int[] arr5 = Arrays.copyOfRange(arr, 0, 7); // arr5 = [0,1,2,3,4,0,0]
  • copyOf() : 매개변수로 받은 배열과 길이만큼 새로운 배열에 복사한다.
  • copyOfRange() : 지정한 범위만큼 새로운 배열을 복사하며 지정된 범위의 끝은 포함되지 않음.

배열 채우기

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

배열의 정렬과 검색

int[] arr = { 3, 2, 0, 1, 4 };
int idx = Arrays.binarySearch(arr, 2);
System.out.println(idx); // -5 -> 잘못된 결과

Arrays.sort(arr);
int idx2 = Arrays.binarySearch(arr, 2);
System.out.println(idx2); // 2 -> 올바른 결과
  • sort() : 배열을 오름차순으로 정렬한다.
  • binarySearch() : 이진 검색으로 검색할 범위를 절반씩 줄이며 검색한다. 큰 배열의 검색에 유리하지만 배열이 정렬되어 있는 경우에만 사용할 수 있다.

배열의 출력과 비교

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

String[][] str2d = new String[][] { { "aa", "bb" }, { "AA", "BB" } };
String[][] str2d2 = new String[][] { { "aa", "bb" }, { "AA", "BB" } };

System.out.println(Arrays.equals(str2d, str2d2)); // false
System.out.println(Arrays.deepEquals(str2d, str2d2)); // true
  • toString() : 일차원 배열을 출력한다.
  • deepToString() : 다차원 배열을 출력한다.
  • equals() : 두 배열에 저장된 모든 요소를 비교해서 boolean 값을 반환한다. 위에서는 배열에 저장된 배열의 주소를 비교했기 때문에 false가 반환됐다.
  • deepEquals() : 다차원 배열에서의 비교를 할 때 사용한다.

배열을 List로 변환

List list = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
list.add(6); // 에러 발생

List list2 = Arrays.asList(1, 2, 3, 4, 5);
List list3 = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));
  • asList() : 배열을 List에 담아서 반환한다. 배열 생성없이 저장할 요소들만 나열하는 것도 가능하다. 하지만 asList()로 생성한 List도 배열이기 때문에 크기를 변경할 수 없기 때문에 ArrayList를 사용하는 방법도 있다.

람다와 스트림 관련

  • parallelXXX() : 여러 쓰레드로 작업을 나누어 처리하도록 한다.
  • spliterator() : 여러 쓰레드가 처리하도록 하나의 작업을 여러 작업으로 나누는 Spliterator를 반환한다.
  • stream() : 컬렉션을 스트림으로 변환한다.

Arrays 예제

import java.util.*;

class ArraysEx {
	public static void main(String[] args) {
		int[]	arr   =  {0,1,2,3,4};
		int[][] arr2D =  {{11,12,13}, {21,22,23}};

		System.out.println("arr="+Arrays.toString(arr));
		System.out.println("arr2D="+Arrays.deepToString(arr2D));

		int[] arr2 = Arrays.copyOf(arr, arr.length);
		int[] arr3 = Arrays.copyOf(arr, 3);          
		int[] arr4 = Arrays.copyOf(arr, 7);          
		int[] arr5 = Arrays.copyOfRange(arr, 2, 4);  
		int[] arr6 = Arrays.copyOfRange(arr, 0, 7);  

		System.out.println("arr2="+ Arrays.toString(arr2));
		System.out.println("arr3="+ Arrays.toString(arr3));
		System.out.println("arr4="+ Arrays.toString(arr4));
		System.out.println("arr5="+ Arrays.toString(arr5));
		System.out.println("arr6="+ Arrays.toString(arr6));

		int[] arr7 =  new int[5];
		Arrays.fill(arr7, 9);  // arr=[9,9,9,9,9]
		System.out.println("arr7="+Arrays.toString(arr7));

		Arrays.setAll(arr7, i -> (int)(Math.random()*6)+1);
		System.out.println("arr7="+Arrays.toString(arr7));

		for(int i : arr7) {
			char[] graph = new char[i];
			Arrays.fill(graph, '*');
			System.out.println(new String(graph)+i);
		}

		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

		char[] chArr = { 'A', 'D', 'C',  'B', 'E' };

		int idx = Arrays.binarySearch(chArr, 'B');
		System.out.println("chArr="+Arrays.toString(chArr));
		System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B'));
		System.out.println("= After sorting =");
		Arrays.sort(chArr);
		System.out.println("chArr="+Arrays.toString(chArr));
		System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B'));
	}
}
profile
할 수 있다

0개의 댓글