: 새로운 배열로 특정 배열을 복사하는 메소드 함수
: 원본 배열에서 원하는 길이만큼 복사할 수 있어 활용도가 높다
: 새로운 배열 = Arrays.copyof(복사할 배열, 복사하고픈 요소만큼의 길이)
: 요소의 길이가 원본배열보다 길어도 오류없이 복사할 수 있다. 빈 공간은 숫자 0으로 채워져 출력된다.
int arr[] = {1,2,3,4,5,6};
int arrCopy1[] = Arrays.copyOf(arr, 3);
int arrCopy2[] = Arrays.copyOf(arr, 7);
for (int i=0; i<arrCopy1.length; i++) {
System.out.print(arrCopy1[i] + " ");
}
System.out.println();
for (int i=0; i<arrCopy2.length; i++) {
System.out.print(arrCopy2[i] + " ");
}
실행모습
1 2 3 1 2 3 4 5 6 0
-> arrCopy2를 보면 원본배열보다 카피하는 길이를 더 길게 줬음에도 오류없이 출력되는 모습을 확인할 수 있었다.
: 원하는 곳에서 원하는 곳까지의 특정 범위를 복사한다.
: 원하는 배열의 원하는 범위 만큼만 복사하여 새로운 배열을 만드는 메소드 함수
: 새로운 배열 = Arrays.copyOfRangs(원본배열, 원하는 범위의 시작 인덱스, 원하는 범위의 마지막 인덱스)
int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arrCopy1 = Arrays.copyOfRange(arr, 2, 6);
int[] arrCopy2 = Arrays.copyOfRange(arr, 3, 13);
System.out.print("arr의 요소 중 인덱스2에서 6까지 불러오기 : ");
for(int i=0;i<arrCopy1.length;i++) {
System.out.print(arrCopy1[i]+" ");
}
System.out.println();
System.out.print("arr의 요소 중 인덱스3에서 13까지 불러오기 : ");
for(int i=0; i<arrCopy2.length; i++) {
System.out.print(arrCopy2[i] + " ");
}
실행결과
arr의 요소 중 인덱스2에서 6까지 불러오기 : 2 3 4 5 arr의 요소 중 인덱스3에서 13까지 불러오기 : 3 4 5 6 7 8 9 10 0 0
-> 마찬가지로 원본배열의 크기를 넘어 복사하겠다 말해도 오류나지 않고 출력 된다.
: System.arraycopy(원본 배열, 어떤 인덱스부터 카피할거니, 카피 배열, 몇 번 인덱스부터 채워넣을래, 몇 개 채워넣을래);
: System.arraycopy(src, srcPos, dest, destPos, length);
: 카피할 배열의 범위를 잡준 다음 사용한다. 원본 배열보다 길어도 상관 없다.
: srcPos에서 선택한 숫자가 원본 배열의 인덱스 번호가 되고
destPos에서 선택한 인덱스가 카피 배열에서의 시작 인덱스가 된다. 2로 잡으면 0,1의 인덱스는 건너 뛰는 것
lenth는 말그대로 그 길이만큼 복사한다.
char[] arr1 = {'J', 'A', 'V', 'A'};
// 카피 배열 값 주기
char[] arr3 = {'S', 'T', 'U', 'D', 'Y'};
System.arraycopy(arr1, 0, arr3, 2, 2);
System.out.println(arr3);
System.arraycopy(arr1, 0, arr3, 2, 2);
-> arr배열에서 0번 인덱스부터 2개를 복사하겠다했고, 그것을 arr3배열에 2번 인덱스부터 넣겠다고 작성해주었다.
실행모습
STJAY
: 배열을 오름차순으로 정렬해주는것
1. Arrays.sort(정리할 배열)
: 배열을 오름차순으로 정렬
2. Arrays.sort(정리할 배열, i, j)
: 배열을 i 부터 j 까지 오름차순으로 정렬
// arr1 배열을 오름차순으로 정리하기
int[] arr1 = {5,3,7,2,8,6,0,4};
Arrays.sort(arr1);
for (int i=0; i<arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
System.out.println();
// arr2 배열을 2번 인덱스부터 오름차순 정리하기
int[] arr2 = {4,2,6,8,0,1};
Arrays.sort(arr2,2,arr2.length);
for(int i=0; i<arr2.length; i++) {
System.out.print(arr2[i] + " ");
}
실행 결과
0 2 3 4 5 6 7 8 4 2 0 1 6 8
int[] arr3 = {1,3,4,2,5};
Arrays.sort(arr3);
// 배열 끝부터 거꾸로 하나씩 출력해주겠다
for (int i = (arr3.length) - 1; i >= 0; i--) {
System.out.print(arr3[i] + " ");
}
실행 결과
5 4 3 2 1
// 익명 구현 객체로
// 내림차순 정렬
Integer[] scores1 = {94, 99, 97, 98, 88};
Arrays.sort(scores1, 0, 3, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
System.out.println(Arrays.toString(scores1));
실행 모습
[99, 97, 94, 98, 88]
String[] name = {"홍길동", "김자바", "이공부", "박이것", "유저것"};
Arrays.sort(name);
for (String names1 : name) {
System.out.print(names1 + " ");
}
실행모습
김자바 박이것 유저것 이공부 홍길동
String[] name1 = {"홍길동", "김자바", "이공부", "박이것", "유저것"};
Comparator<String> c = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
// 원본배열, 시작 인덱스, 끝 인덱스, comparator
Arrays.sort(name1, 0, 3, c);
for (String names1 : name1) {
System.out.print(names1 + " ");
}
실행 모습
김자바 이공부 홍길동 박이것 유저것
String[] name2 = {"홍길동", "김자바", "이공부", "박이것", "유저것"};
Comparator<String> c2 = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// 이 비교 부분을 뒤집어 주면 된다
return o2.compareTo(o1);
}
};
Arrays.sort(name2, c2);
for (String names2 : name2) {
System.out.print(names2 + " ");
}
실행모습
홍길동 이공부 유저것 박이것 김자바
String[] arr = {"Apple", "Kiwi", "Orange", "Banana", "Watermelon", "Cherry"};
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
System.out.println(Arrays.toString(arr));
실행 모습
[Kiwi, Apple, Orange, Banana, Cherry, Watermelon]
클래스에 Comparable을 구현하여 비교할 수 있게 해야한다.
1. 아래와 같이 Member클래스를 만들어주었다.
String name;
Integer num;
public Member03_1(Integer num, String name) {
this.name = name;
this.num = num;
}
@Override
public int compareTo(Member03_1 o) {
int result = num.compareTo(o.num);
if(result == 0) {
int result2 = name.compareTo(o.name);
return result2;
} else {
return result;
}
}
Member03_1 m1 = new Member03_1(2021, "홍길동");
Member03_1 m2 = new Member03_1(2021, "박동수");
Member03_1 m3 = new Member03_1(2018, "김민수");
Member03_1[] members = {m1, m2, m3};
Arrays.sort(members);
for (int i=0; i<members.length; i++) {
System.out.println(members[i].num + " " + members[i].name);
}
실행 모습
2018 김민수 2021 박동수 2021 홍길동