자바 - Arrays

namkun·2022년 6월 26일
0

JAVA

목록 보기
2/20

Arrays 클래스에는 배열을 다루기 위한 여러 메서드가 들어있다.
Arrays의 내부에 있는 모든 메서드는 static 메서드이므로 객체를 생성하지 않고도 사용할 수 있다.

자주 사용되는 메서드들로 우선 정리해보자.

asList

  • asList는 배열을 고정크기의 List형태로 변환해서 반환해주는 메서드이다.
  • 이렇게 생성된 list는 인자 추가가 불가하며, 값 변경시에는 원본 배열값도 변경된다.
  • 인자를 추가하면서 원본 배열을 유지하고 싶다면, new List를 사용해야 한다.
String [] arr = {"a", "b"};
List<String> list = Arrays.asList(arr);

list.add("c"); // java.lang.UnsupportedOperationException

List<String> list2 = new ArrayList<String>(Arrays.asList(arr));

list2.add("c"); // success

toString

  • 배열 출력을 위한 메서드
  • 1차원 배열의 경우에는 toString 메서드를 사용하지만, 다차원배열의 경우에는 deepToString 이라는 메서드를 사용해야 한다.
  • 다차원 배열에 toString 메서드를 사용하면, 그냥 주소값만 던져준다.
String[] arr = {"a", "b"};
System.out.println(Arrays.toString(arr)); // {"a", "b"}

String[][] multiArr = {{"a","b"},{"c","d"}};
System.out.println(Arrays.deepToString(arr)); // {{"a","b"},{"c","d"}}

sort

  • 배열 값을 오름 차순으로 정렬해준다.
  • 물론 옵션을 통해서 내림 차순으로도, 원하는 조건으로도 정렬할 수 있다.
int[] arr = {1,4,2,5,3};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 1,2,3,4,5

// 내림 차순
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(Arrays.toString(arr)); // 5,4,3,2,1

// custom condition sort
String [] arr2 = {"A", "ABCDE", "ABC"}
Arrays.sort(arr2, new Comparator<String>(){
			@Override
            public int compare(String a, String b){
            	return a.length() - b.length(); // sort by length
            }
});
System.out.println(Arrays.toString(arr2)); // {"A", "ABC", "ABCDE"}

equals

  • 배열간의 비교를 위해서 사용
  • 위의 toString과 비슷하게, 다차원배열의 비교를 위한 deepEquals 메서드가 존재한다.
String[] arr = {"a", "b"};
String[] arr2 = {"a", "b"};
System.out.println(Arrays.equals(arr, arr2)); // true

String[][] multiArr = {{"a","b"},{"c","d"}};
String[][] multiArr2 = {{"a","b"},{"c","d"}};
System.out.println(Arrays.deepEquals(multiArr, multiArr2)); // true

copyOf, copyOfRange

  • 배열의 복사를 위해서 사용한다.
  • copyOf 는 전달받은 배열을 특정 길이의 새로운 배열로 복사해서 반환
  • copyOfRange 는 전달받은 배열의 특정 범위에 해당하는 요소만 새로운 배열로 복사
  • 두 메서드의 사용방법은 다음과 같다.
Arrays.copyOf(arr, int length) // arr : 원본 배열 , length = 복사될 새 배열의 길이
Arrays.copyOfRange(arr, int from, int end) // arr : 원본 배열 , from : 시작 인덱스, end : 끝 인덱스. - 시작인덱스부터 끝인덱스까지만 복사함
  • 재밌는 것은, 원본 배열보다 새로 복사될 배열의 길이가 더 긴 상황에서는 나머지 자리에 배열 타입에 맞게 기본값이 체워지게 된다.
    • 기본값 목록
      • char : '\u0000'
      • byte, short, int : 0
      • long : 0L
      • float : 0.0F
      • double : 0.0 or 0.0D
      • boolean : false
      • arr, instance... : null
int [] arr = {1,2,3};
int [] copyArr1 = Arrays.copyOf(arr, 1); // {1}
int [] copyArr2 = Arrays.copyOf(arr, 4); // {1, 2, 3, 0}
int [] copyArr3 = Arrays.copyOfRange(arr, 0, 1); // {1}
int [] copyArr4 = Arrays.copyOfRange(arr, 0, 5); // {1, 2, 3, 0, 0}

binarySearch

  • 배열내부에서 이진 검색을 하는 메서드, 반환값은 검색 원하는 값의 인덱스 값이다.
  • 주의할 점은 사용전에 해당 배열이 정렬이 되어있어야 한다는 것
int[] arr = {1,4,7,2,5};
Arrays.sort(arr);
int idx = Arrays.binarySearch(arr, 4); // 2

fill

  • 배열을 특정값으로 초기화하는 메서드이다.
int [] arr = new int[3];
Arrays.fill(arr, 1); // {1, 1, 1}
profile
개발하는 중국학과 사람

0개의 댓글