Arrays Class
배열 조작 기능을 가지고 있는 클래스입니다.
배열의 복사, 항목 정렬, 항목 검색
정적 메서드
Return Type | Method Name | Desc |
int | binarySearch(배열, 찾는값) | 전체 배열 항목에서 찾는값이 존재하는 인덱스 리턴 |
copy한 Array | copyOf(원본배열, 복사할 길이) |
원본 배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열을 리턴합니다. 복사할 길이는 원본 배열의 길이보다 커도 되며 빈 값은 기본값으로 채워집니다. |
copy한 Array | copyOfRange(원본배열, 시작인덱스, 끝인덱스) | 원본배열의 시작인덱스에서 끝인덱스까지 복사한 배열을 리턴합니다. |
boolean | deepequals(배열, 배열) | 깊은 비교(중첩 배열의 항목까지 비교) |
boolean | equals(배열, 배열) | 얕은 비교(중첩 배열의 항목은 비교하지않습니다.) |
void | fill(배열, 값) | 전체 배열 항목에 동일한 값을 저장합니다. |
void | fill(배열, 시작인데스, 끝인덱스, 값) | 시작인덱스부터 끝인덱스까지의 항목에만 동일한 값을 저장 |
void | sort(배열) | 배열의 전체 항목을 올림차순으로 정렬 |
배열 복사
● Arrays.copyOf(원본 배열 , 복사할 길이)●
0번째 인덱스부터 복사할 길이 -1까지 항목을 복사합니다.
복사할 길이는 원본 배열의 길이보다 커도 되며 타깃 배열의 길이가 됩니다.
int arr1 = {1,2,3,4,5};
int arr2 = Arrays.copyOf(arr1,arr1.length);
복사된 arr2배열
arr2 = {1,2,3,4,5};
만약 원본배열보다 길이가 크다면
arr2 = Arrays.copyOf(arr1,10);
복사된 arr2배열
arr2 = {1,2,3,4,5,0,0,0,0,0};
● copyOfRange(원본 배열, 시작 인덱스, 끝 인덱스)
시작 인덱스 ~ 끝 인덱스-1까지 항목 복사.
int arr1 = {1,2,3,4,5};
int arr2 = Arrays.copyOfRange(arr1,1,3);
결과값
arr2 ={2,3}
System.arraycopy()
System.arraycopy(원본 배열, 원본 시작 인덱스, 타깃 배열, 타깃 시작 인덱스, 복사 개수)
원본 배열에서 원본 시작인데스부터 타깃 배열의 시작 인덱스부터 복사 개수만큼 복사하라는 이야기입니다.
Arrays.equals(배열, 배열)
1차 항목의 값만 비교
- 비교할 수 없는 경우
비교하려는 배열들의 값이 또 다른 배열을 참조하는 경우(2차원 배열)
equals는 주소를 비교하므로 다른 배열의 주소 값이 다르기 때문에 false가 리턴됩니다.
Arrays.deepEquals(배열, 배열)
중첩된 배열의 항목까지 비교
deepEquals는 비교하려는 배열들의 값이 또 다른 배열을 참조하더라고 그 값이 같다면 true를 리턴합니다.
package arrays;
import java.util.Arrays;
public class Equals {
public static void main(String[] args) {
int[][] loc1= {{1,2},{3,4}};
int[][] loc2 = Arrays.copyOf(loc1, loc1.length);
System.out.println(Arrays.toString(loc1));
System.out.println(Arrays.toString(loc2));
System.out.println(loc1.equals(loc2));
System.out.println(Arrays.equals(loc1, loc2));
System.out.println(Arrays.deepEquals(loc1, loc2));
}
}
만약 깊은 복사를 했다면 값은 달라집니다
package arrays;
import java.util.Arrays;
public class Equals {
public static void main(String[] args) {
int[][] loc1= {{1,2},{3,4}};
int[][] loc2 = Arrays.copyOf(loc1, loc1.length);
loc2[0] = Arrays.copyOf(loc1[0], loc1[0].length);
loc2[1] = Arrays.copyOf(loc1[1], loc1[1].length);
System.out.println(Arrays.toString(loc1));
System.out.println(Arrays.toString(loc2));
System.out.println(loc1.equals(loc2));
System.out.println(Arrays.equals(loc1, loc2));
System.out.println(Arrays.deepEquals(loc1, loc2));
}
}
얕은 복사를 했을 경우 동일한 주소 값을 가리키게 되지만 깊은 복사로 배열의 값을 복사한 경우에는 주소 값이 다르기 때문에 equals 메서드에서 false를 리턴하며 deepEquals메서드는 값이 같기 때문에 true를 리턴합니다.
Arrays.sort(배열)
항목을 오름차순으로 정렬
기본 타입이거나 String 배열은 자동으로 정렬됩니다.
사용자 정의 클래스 배열은 Comparable 인터페이스를 구현해야 정렬됩니다.
package arrays;
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
int[] scores = {80,83,81,82};
Arrays.sort(scores);
System.out.println(Arrays.toString(scores));
}
}
String경우 자음의 순서대로 정렬이 됩니다.
사용자 지정 형식의 클래스를 정렬하기 위해선 Comparable이라는 인터페이스를 상속해야 합니다.
만약 구현하지 않는다면 다음과 같은 오류가 발생합니다.
인터페이스를 상속받아 인터페이스 메서드를 오버라이드 해줍니다.
Arrays.binarySearch(배열, 찾는 값)
먼저 sort()로 먼저 정렬을 한 후 binarySearch메서드로 항목을 찾아야 합니다.
int[] scores = {81,83,82};
Arrays.sort(scores);
int index = Arrays.binarySearch(scores, 83);
System.out.println(index);
검색할 때 정렬을 하지 않는 경우
사용자 형식
이 씨가 마지막 인덱스므로 첫 번째 인덱스에서 2번째 인덱스로 정렬되어 2번째 인덱스가 출력되었다.
'JAVA > [JAVA] 바구니' 카테고리의 다른 글
[JAVA] String Class(2) (0) | 2020.05.12 |
---|---|
[JAVA] String Class (0) | 2020.05.08 |
[JAVA] Map Colletion (0) | 2020.05.03 |
[JAVA] Set Collection (0) | 2020.05.02 |
[JAVA] List Collection (0) | 2020.04.28 |
댓글