_Hiiro
성장을 공유하는 개발자
_Hiiro
전체 방문자
오늘
어제
  • 분류 전체보기 (57)
    • 개발기록 (3)
      • 사이드 프로젝트 (3)
    • 코딩테스트 (5)
      • 인프런 강의 (4)
      • 정리노트 (1)
      • 프로그래머스 (0)
      • 구름 (0)
    • Language (5)
      • Java (5)
    • 우아한테크코스 (43)
      • 우테코 프리코스 (5)
      • 회고 (18)
      • 학습 정리 (18)
      • 글쓰기 (2)
    • 일상 (1)
      • 회고 (1)

블로그 메뉴

  • 홈
  • 방명록
  • 글쓰기
  • 관리자

인기 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
_Hiiro
Language/Java

java.util.Arrays 정리

Language/Java

java.util.Arrays 정리

2022. 10. 9. 18:11

Arrays 클래스 개요

Arrays 클래스는 배열을 조작하기 위한(정렬 및 검색 등) 다양한 메소드들을 포함하고 있는 클래스이다. 이 클래스는 배열을 리스트처럼 다룰 수 있도록 하게 해주는 static factory를 포함한다.

 

※ static factory : 클래스의 인스턴스화, 즉 객체 생성을 constructor(생성자)가 아닌 static 메소드로 하는 것을 static factory 메소드라고 한다. 

 

대표적인 Arrays 메소드

메소드 설명
static <T> List<T> asList(T...a) 전달받은 배열을 고정 크기의 List로 변환하여 리턴
static int binarySearch(Object[] a, Object key) binary search 알고리즘을 이용하여 주어진 배열에서 key값을 검색하고, 그 index를 리턴한다.
static <T> T[] copyOf(T[] original, int newLength) 전달받은 배열을 특정 길이의 새로운 배열로 복사하여 반환한다.
static <T> T[] copyOfRange(T[] original, int from, int to) 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환한다.
static void fill(Object[] a, Object val) 전달받은 배열의 모든 요소를 특정 값으로 초기화한다.
static <T> void sort(T[] a, Comparator<? super T> c) 전달받은 배열의 모든 객체들을 명시된 comparator에서 유도된 순서로 정렬한다. 배열 내 모든 요소들은 명시된 comparator로 상호 비교 가능해야만 한다. 
public static boolean equals(Object[] a1,Object[] a2) 전달받은 두 배열을 얕은 비교한 이후 같다면 true 값을 리턴한다. 두 배열이 모두 같은 개수의 요소를 가지고, 모든 요소 값이 동일하다면 이 두 배열은 동일하다고 판단한다. (2차원 배열 이상은비교하지 못한다.)
public static boolean deepEquals(Object[] a1,  Object[] a2) 전달받은 두 배열을 깊은 비교한 이후 같다면 true 값을 리턴한다. 두 배열이 모두 같은 개수의 요소를 가지고, 모든 요소 값이 동일하다면 이 두 배열은 동일하다고 판단한다. (2차원 배열 이상의 경우 중첩된 하위 배열의 항목들까지 전부 비교한다.)

 

Arrays.binarySearch(Object[] a, Object key)

매개변수로 넘겨지는 배열은 반드시 정렬 상태여야 한다. 

만약 주어진 배열 내에 찾고자 하는 key값이 존재하지 않는다면 해당 key값이 삽입되었을 때 정렬상태를 유지하는 위치를 찾은 후 -1을 곱한 뒤에 1을 뺀 값을 리턴해준다. 

 

Arrays.copyOf(T[] original, int newLength)

복사할 길이는 원본 배열보다 더 커도 되며, 리턴되는 새로운 배열의 길이가 된다. 이러한 경우 늘어난 길이 만큼에 위치하는 값들은 배열 요소의 타입에 맞게 기본값들로 초기화되게 된다.

 

Arrays.copyOfRange(T[] original, int from, int to)

첫 번째 매개변수로 넘겨 받은 원본 배열에서 from 인덱스부터 to 인덱스 바로 전까지에 해당하는 요소들을 복사한 새로운 배열을 생성하여 리턴해준다.

 

Arrays.sort(T[] a, Comparator<? super T> c)

기본적으로 comparator 객체를 매개변수로 넘겨주지 않으면 natural order(오름차순)로 정렬하도록 설정되어 있다. 내림차순으로 정렬되기를 원한다면 아래처럼 Collections 클래스에서 reverseOrder() 메소드를 인자로 넘겨주어야 한다. 

 

// primitive 데이터 배열은 sort 메소드를 사용할 수 없다.
Integer[] arr = {15, 3, 30, 40, 65, 80, 54};

//Collections 클래스 내부에 미리 구현되어 있는 Comparator를 전달한다.
Arrays.sort(arr, Collections.reverseOrder());

//Comparator를 직접 구현하는 방식
Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
});

//Lambda 형으로 구현 (자바 8 이상부터 사용 가능)
Arrays.sort(arr, (o1, o2) -> o2-o1);


for(int x : arr) System.out.print(x+" ");	// 80 65 54 40 30 15 3

 

Arrays.equals() & Arrays.deepEquals()

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

//copyOf 얕은 복사
int[][] copied1 = Arrays.copyOf(originArr,originArr.length);
System.out.println("얕은 복사 후 비교");
System.out.println("배열의 주소값 비교 : " + originArr.equals(copied1));                 //false
System.out.println("1차원 배열의 항목값 비교 : " + Arrays.equals(originArr, copied1));    //true
System.out.println("중첩 배열 항목값 비교 : " + Arrays.deepEquals(originArr, copied1));  //true

System.out.println();

//copyOf 깊은 복사
int[][] copied2 = Arrays.copyOf(originArr,originArr.length);    
copied2[0] = Arrays.copyOf(originArr[0],originArr[0].length);
copied2[1] = Arrays.copyOf(originArr[1], originArr[1].length);
System.out.println("깊은 복사 후 비교");
System.out.println("배열의 주소값 비교 : " + originArr.equals(copied2));                  //false
System.out.println("1차원 배열의 항목값 비교 : " + Arrays.equals(originArr, copied2));    //false
System.out.println("중첩 배열 항목값 비교 : " + Arrays.deepEquals(originArr, copied2));  //true

 

 


참고 레퍼런스

  • https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
  • https://kephilab.tistory.com/102
  • https://jy-tblog.tistory.com/38
  • http://www.tcpschool.com/java/java_api_arrays
  • https://junlab.tistory.com/236

 

저작자표시 (새창열림)

'Language > Java' 카테고리의 다른 글

[JAVA] Comparator  (0) 2024.08.20
[Java] String to List  (0) 2022.11.07
[Java] String to Integer, Integer to String  (0) 2022.10.09
배열(Array)과 리스트(List)  (0) 2022.10.09
  • Arrays 클래스 개요
  • 대표적인 Arrays 메소드
  • Arrays.binarySearch(Object[] a, Object key)
  • Arrays.copyOf(T[] original, int newLength)
  • Arrays.copyOfRange(T[] original, int from, int to)
  • Arrays.sort(T[] a, Comparator<? super T> c)
  • Arrays.equals() & Arrays.deepEquals()
'Language/Java' 카테고리의 다른 글
  • [JAVA] Comparator
  • [Java] String to List
  • [Java] String to Integer, Integer to String
  • 배열(Array)과 리스트(List)
_Hiiro
_Hiiro
성장을 위한 학습을 하며 배운 것들을 공유합니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.