Arrays
클래스에는 배열을 다루기 위한 여러 메서드가 들어있다.
Arrays
의 내부에 있는 모든 메서드는 static 메서드이므로 객체를 생성하지 않고도 사용할 수 있다.
자주 사용되는 메서드들로 우선 정리해보자.
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
deepToString
이라는 메서드를 사용해야 한다.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"}}
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"}
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
는 전달받은 배열의 특정 범위에 해당하는 요소만 새로운 배열로 복사Arrays.copyOf(arr, int length) // arr : 원본 배열 , length = 복사될 새 배열의 길이
Arrays.copyOfRange(arr, int from, int end) // arr : 원본 배열 , from : 시작 인덱스, end : 끝 인덱스. - 시작인덱스부터 끝인덱스까지만 복사함
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}
int[] arr = {1,4,7,2,5};
Arrays.sort(arr);
int idx = Arrays.binarySearch(arr, 4); // 2
int [] arr = new int[3];
Arrays.fill(arr, 1); // {1, 1, 1}