자바의 정석 - Arrays

Yohan·2024년 2월 10일
0
post-custom-banner

Arrays 클래스

  • 배열을 다루기 편리한 메서드(static) 제공
  1. 배열의 출력 - toString()
static String toString(char[] a) 
  1. 배열의 복사 - copyOf(), 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]
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6 = [0,1,2,3,4,0,0]
  1. 배열 채우기 - fill(), setAll()
int[] arr = new int[5];
Arrays.fill(arr, 9); // arr = [9,9,9,9,9]
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1); 1<=i<6
  1. 배열의 정렬과 검색 - sort(), binarySearch()
  • binarySearch()는 이진탐색(이분탐색) -> 정렬된 배열에만 가능
int[] arr = {3, 2, 0, 1, 4};
int idx = Arrays.binarySearch(arr, 2); // 잘못된 결과

Arrays.sort(arr); // 배열 정렬
System.out.println(Arrays.toString(arr)); // 출력, [0,1,2,3,4]
int idx = Arrays.binarySearch(arr, 2); // idx = 2, 올바른 결과
  1. 다차원 배열의 출력 - 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]]
  1. 다차원 배열의 비교 - 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
  1. 배열을 List로 변환 - asList(Object... a)
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); // UnspportedOperationException 예외 발생 - List는 읽기 전용

// 변경하고싶을 때 새로운 ArrayList가 필요
List list = new ArrayList(Arrays.asList(1,2,3,4,5));
  1. 람다와 스트림 - parallelXXX(), spliterator(), stream()

순차검색과 이진탐색

  • 순차 검색 - 앞(또는 뒤)에서부터 반복문으로 순서대로 검색
  • 이진 탐색 - 배열을 정렬 후, 배열을 반복해서 반으로 나누어 범위를 줄여가며 비교 탐색

예제

// for(int x=0;x<arr7.length;x++) {
//	int i = arr7[x]; 와 동일
for(int i : arr7) { // 향상된 for문
	char[] graph = new char[3];
    Arrays.fill(graph,"*");
    System.out.println(new String(graph)+i);
    // char[] -> String (String(char[]) - 생성자 사용
    // String -> char[] (toCharArray())
    
    // ***3
}
profile
백엔드 개발자
post-custom-banner

0개의 댓글