Skip to main content

[Java] Array


두 개 배열 같은지 비교

Arrays.equals(original, new);

Arrays.equals(bubble, sort);
int[] bubble = {1, 2, 3};
int[] sort = {1, 2, 3};

if (Arrays.equals(bubble, sort)) {
    System.out.println("두 배열이 같아요!");
} else {
    System.out.println("두 배열이 달라요!");
}


배열 복사

Arrays.clone()

int[] original = {1, 2, 3};
int[] copy = original.clone();

Arrays.clone()은 배열을 깊은 복사해서 새로운 배열을 만들고, 그 새 배열을 다시 변수에 할당해서 새 배열을 만든다.
이렇게 하면 copyoriginal의 복사본이 되고, 둘은 서로 다른 배열이 된다.

Arrays.copyOf()

int[] newArray = Arrays.copyOf(originalArray, newLength);

Arrays.copyOf()는 배열을 원하는 크기만큼 복사해서 새 배열을 만드는 메서드야.
기존 배열 일부만 복사하거나, 전체 복사할 때 자주 쓰이인다.

  • originalArray : 복사할 원본 배열
  • newLength : 새 배열의 크기 (원본보다 크면 부족한 부분은 기본값(0)으로 채워짐)
  • 반환값은 복사된 새로운 배열
  • 원본 배열의 길이보다 newLength가 크면 나머지 칸은 기본값(숫자 배열은 0)으로 채워짐
  • 원본 배열보다 짧으면 그만큼만 복사해서 자름
int[] arr = {1, 2, 3, 4, 5};
int[] copy1 = Arrays.copyOf(arr, 3);  // {1, 2, 3}
int[] copy2 = Arrays.copyOf(arr, 7);  // {1, 2, 3, 4, 5, 0, 0}


배열 중복값 제거, 정렬

배열 중복값 제거하고 배열 데이터 내림차순으로 정렬해서 반환하기

import java.util.Arrays;
import java.util.Collections;

class Solution {
  public static int[] solution(int[] arr) {
    // 1. 중복값 제거 + Integer[] 변환
    Integer[] result = Arrays.stream(arr)
                             .boxed()
                             .distinct()
                             .toArray(Integer[]::new);

    // 2. 내림차순 정렬
    Arrays.sort(result, Collections.reverseOrder());

    // 3. Integer[] -> int[] 변환 후 반환
    return Arrays.stream(result)
                 .mapToInt(Integer::intValue)
                 .toArray();
  }
}

stream 안쓸거면 아래와 같이 TreeSet으로 구현해도 되지만 있는거 쓰자

import java.util.Arrays;
import java.util.TreeSet;
import java.util.Comparator;

class Solution {
  public static int[] solution(int[] arr) {
    // 1. TreeSet에 내림차순 정렬로 값 넣기 (중복 자동 제거됨)
    TreeSet<Integer> treeSet = new TreeSet<>(Comparator.reverseOrder());
    for (int num : arr) {
      treeSet.add(num);
    }

    // 2. TreeSet -> int[] 변환
    return treeSet.stream()
                  .mapToInt(Integer::intValue)
                  .toArray();
  }
}