100세까지 코딩
[자바 공부] Arrays 메서드 정리 본문
java.util.Arrays
Arrays 클래스는 배열에 대해 정렬, 검색, 비교 등의 메서드를 제공한다.
대표적인 메서드를 알아보자.
1) Arrays.Sort(arr)
import java.util.*;
public class Main {
public static void main(String[] args) {
int [] arr = {1,2,3,4,7,9,6,5,8,10};
Arrays.sort(arr);
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
결과 :
가장 많이 쓰인다해도 과언이 아니다.
arr 배열을 오름차순으로 정리해 주는 기능이다.
1-1) Arrays.Sort(arr,Collections.reverseOrder())
import java.util.*;
public class Main {
public static void main(String[] args) {
Integer [] arr = {1,2,3,4,7,9,6,5,8,10};
Arrays.sort(arr,Collections.reverseOrder());
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
결과 :
내림차순으로 정리할 때 쓰는 메서드다.
Collections는 Object를 상속한 클래스에 대해 사용 가능한 인터페이스이므로
Wrapper 클래스로 만들거나 박싱 하는 과정을 거쳐야 한다.
1-2) Arrays.Sort(arr, Comparator())
import java.util.*;
public class Main {
public static void main(String[] args) {
int[][] arr = {{1,500},{2,400},{3,300},{4,200}};
Comparator<int[]> comparator1 = new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0]; // 앞에 값에 대한 오름차순
}
};
System.out.println("---앞 값에 대한 정렬---");
Arrays.sort(arr,comparator1);
for(int[] a : arr) { // for each 반복문
System.out.println(a[0] + " " + a[1]);
}
Comparator<int[]> comparator2 = new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[1]-o2[1]; // 뒤에 값에 대한 오름차순
}
};
System.out.println("---뒤 값에 대한 정렬---");
Arrays.sort(arr,comparator2);
for(int[] a : arr) { // for each 반복문
System.out.println(a[0] + " " + a[1]);
}
}
}
결과 :
객체 배열 또는 2차원 배열은 Comparator의 compare메서드를 구현하여 사용한다.
사용자가 정의하기에 다양한 정렬을 구현할 수 있다.
2) Arrays.CopyOf(arr, arr.length)
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arr2 = Arrays.copyOf(arr, arr.length);
for(int i : arr2) {
System.out.print(i+" ");
}
}
}
결과 :
Arrays.CopyOf(복사할 배열, 복사할 길이)이다.
arr.length를 넣으면 끝까지 다 복사가 된다.
2-1) Arrays.CopyOfRange(arr, start Index, end Index)
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arr2 = Arrays.copyOfRange(arr,2,5);
for(int i : arr2) {
System.out.print(i+" ");
}
}
}
결과 :
Arrays.CopyOfRange(복사할 배열, 복사 시작 인덱스, 복사 끝 인덱스)이다.
복사 끝 인덱스는 복사에 포함되지 않는다.
만약 배열의 길이를 넘어 복사한다면 0 또는 null로 채워진다.
3) Arrays.binarySearch(arr, 찾을 값)
import java.util.*;
public class Main {
public static void main(String[] args) {
String[] arr = {"1","2","5","4","3"};
System.out.println("--정렬 전 찾기--");
System.out.println(Arrays.binarySearch(arr,"3"));
System.out.println("--정렬 후 찾기--");
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr,"3"));
}
}
결과 :
정렬한 후 사용하면 찾는 항목의 인덱스 값을 리턴한다.
그러나, 정렬을 하지 않고 사용하거나 찾는 값이 없으면 음수값을 리턴한다.
4) Arrays.fill(arr, 채울 값)
import java.util.*;
public class Main {
public static void main(String[] args) {
String[] arr = {"1","2","5","4","3"};
Arrays.fill(arr,"3");
for(String str : arr) {
System.out.print(str+" ");
}
}
}
결과 :
배열을 원하는 값으로 채우거나 초기화하고 싶을 때 사용하면 유용하다.
5) Arrays.equals(arr, arr2) , Arrays.deepEquals(arr, arr2)
import java.util.*;
public class Main {
public static void main(String[] args) {
String[] arr = {"1","2","3","4","5"};
String[] arr2 = {"1","2","5","4","3"};
String[] arr3 = {"1","2","3","4","5"};
System.out.println("배열1과 배열2 비교");
System.out.println(Arrays.equals(arr,arr2));
System.out.println("배열1과 배열3 비교");
System.out.println(Arrays.equals(arr,arr3));
}
}
결과 :
arr과 arr2에 저장된 값들이 같은지 비교해 주는 메서드이다.
다차원 배열은 저장된 값들이 같더라도 주소를 비교하기 때문에 false가 리턴된다.
이때는 deepEquals를 사용해 주면 된다.
6) Arrays.toString(arr) , Arrays.deepToString(arr2)
import java.util.*;
public class Main {
public static void main(String[] args) {
String[] arr = {"1","2","5","4","3"};
String[][] arr2 = {{"A","B"},{"C","D"}};
System.out.print(Arrays.toString(arr));
System.out.println();
System.out.print(Arrays.deepToString(arr2));
}
}
결과 :
arr을 출력해 주는 메서드이다.
다차원 배열은 비교와 마찬가지로 deep을 사용하면 제대로 출력된다.
배열은 다루는 일이 많으니 기억하자!!
'JAVA' 카테고리의 다른 글
[자바 공부] 제네릭 (0) | 2023.09.10 |
---|---|
[자바 공부] String 메서드 정리 (0) | 2023.09.08 |
[자바 공부] 형 변환 함수 차이 (parseXXX, valueOf, toString) (0) | 2023.09.04 |
[자바 공부] 문자열 (String, StringBuffer, StringBuilder) (0) | 2023.09.02 |
[자바 공부] 상속과 바인딩 (0) | 2023.08.12 |