코린이의 소소한 공부노트

Arrays 클래스 본문

Java

Arrays 클래스

무지맘 2022. 11. 4. 17:10

[Arrays 클래스]

1. 배열을 다루기 편리한 (static)메서드를 제공하는 유틸 클래스다.

2. java.util 패키지에 있다.

 

[Arrays 클래스의 메서드]

1. 배열의 출력: toString()

static String toString(X[] a)
// 여러가지 타입이 들어갈 수 있게 오버로딩 되어 있음
// X에 들어가는 것
// 기본형 8가지: boolean, char, byte, short, int, long, double, float
// Object

int[] arr = {0,1,2,3,4};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]

2. 배열의 복사: copyOf(), copyOfRange()

int[] arr = {0,1,2,3,4};

// copyOf(): 지정한 배열에서 해당 길이만큼 복사한 새 배열을 만든다.
// 지정한 길이가 지정한 배열의 길이보다 길면 0으로 채운다.
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}

// copyOfRange(): 지정한 배열에서 from <= index < to만큼 복사한 새 배열을 만든다.
// 지정한 범위가 지정한 배열의 범위를 벗어나면 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}

3. 배열 채우기: fill(), seetAll()

int[] arr = new int[5];

// fill(): 모두 같은 값으로 채운다.
Arrays.fill(arr, 9); // arr = {9,9,9,9,9}

// setAll(): 지정한 람다식으로 계산한 값을 채운다.
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1); // arr = {1,5,2,1,1}

4. 배열의 정렬과 검색: sort(), binarySearch()

int[] arr = {3,2,0,1,4};
// 현재 2는 1번째에 위치한 상태

// binarySearch(): 지정한 배열에서 지정된 값을 이진 탐색해 그 위치를 반환한다.
// 정렬된 배열에 써야 제대로 된 결과가 나온다.
int idx = Arrays.binarySearch(arr, 2); // idx = -5, 잘못된 결과
 
// sort(): 오름차순으로 배열의 값을 정렬해준다. 반환 타입은 void
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2); // idx = 2, 올바른 결과

5. 다차원 배열의 출력: deepToString()

int[] arr = {0,1,2,3,4};
int[][] arr2 = {{11,12},{13,14}};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2)); // [[11, 12], [13, 14]]

6. 다차원 배열의 비교: deepEquals()

int[][] arr = {{11,12},{13,14}};
int[][] arr2 = {{11,12},{13,14}};
System.out.println(Arrays.equals(arr, arr2)); // false, 참조변수의 값을 비교한 것
System.out.println(Arrays.deepEquals(arr, arr2)); // true, 배열의 내용을 비교한 것

7. 배열을 List로 변환: asList()

// 매개변수를 List로 변환한다.
List list = Arrays.asList(new Integer[]{1,2,3,4,5}); // list = {1,2,3,4,5}

// 가변 매개변수라 여러개 넣어도 상관 없다.
List list2 = Arrays.asList(1,2,3,4,5); // list2 = {1,2,3,4,5}

// List는 읽기 전용이기 때문에 변경 할 수 없다.
list2.add(6); // UnsupportedOperationException 발생

List list3 = new ArrayList(Arrays.asList(1,2,3,4,5)); // 변경이 가능하게 ArrayList로 선언한 형태

8. 람다와 스트림 관련: parallelOOO(), spliterator(), stream()


[쿠키글1] 순차 검색과 이진 검색

1. 순차 검색

  - 맨 앞부터 차례대로 탐색하며 원하는 값을 찾는 방식

  - 배열의 요소가 10개라면 평균 (1+2+3+4+5+6+7+8+9+10) / 5 = 5.5회 만에 원하는 값을 찾을 수 있다.

  - 운이 나쁘면 원하는 값을 찾는 데 아주 오래 걸릴 수 있다.

  - 데이터 정렬이 불필요하다.

2. 이진 검색

  - 정렬된 데이터에서 반씩 잘라가며 원하는 값을 찾는 방식

  - 배열의 요소가 10개라면 평균 3~43~4회 만에 원하는 값을 찾을 수 있다.

  - 검색 시간이 짧다.

  - 데이터 정렬이 반드시 선행돼야 한다.

 

[쿠키글2] 향상된 for문

어떤 배열에서 요소 1개씩 쭉 출력하는 코드를 쓰면, 보통 이렇게 많이 쓴다.

int[] arr = {1,2,3,4,5};

for(int i=0 ; i<arr.length ; i++)
    System.out.println(arr[i]);

이를 직관적으로 바꿔서 표현한 것이 향상된 for문이다.

int[] arr = {1,2,3,4,5};

for(int x : arr) // arr에서 요소를 하나 꺼내 i에 저장
    System.out.println(x);

// 위의 for문을 기본 for문으로 바꿔보면 다음과 같다.
for(int i=0 ; i<arr.length ; i++){
    int x = arr[i];
    System.out.println(x);
    }

'Java' 카테고리의 다른 글

HashSet 클래스  (0) 2022.11.07
Comparator, Comparable 인터페이스  (0) 2022.11.05
Iterator, ListIterator, Enumeration 인터페이스  (0) 2022.11.03
스택 클래스와 큐 인터페이스  (0) 2022.11.02
LinkedList 클래스  (0) 2022.11.02