복제
package com.javaex.api.array;
import java.util.Arrays;
public class ArrayEx {
public static void main(String[] args) {
arrayCopyEx();
}
private static void arrayCopyEx() {
int arr[] = new int[] {1,2,3,4,5};
// System 이용 복사
int[] target = new int[arr.length];
System.arraycopy(arr, // 원본배열
0, // 시작인덱스
target, // 대상 배열
0, // 시작 인덱스
arr.length // 복사할 길이
);
System.out.println("원본 배열 : " + Arrays.toString(arr));
System.out.println("System 복제 : "+ Arrays.toString(target));
// arrays의 복제 메서드
target = Arrays.copyOf(arr, arr.length); // 원본 배열, 복사할 배열 길이
System.out.println("CopyOf : "+ Arrays.toString(target));
// 배열 일부 복제
target = Arrays.copyOfRange(arr, 1, 3); // 원본 배열, 복사 시작 인덱스, 복사할 끝 인덱스
System.out.println("CopyOfRange : " + Arrays.toString(target));
}
}
- Arrays.arraycopy ( 원본 배열, 시작인덱스, 대상 배열, 대상 배열의 시작 인덱스, 복사할 길이)
- Arrays.copyOf( 원본 배열, 복사할 배열 길이)
- Arrays.copyOfRange( 원본 배열, 복사 시작 인덱스, 복사할 끝 인덱스)
정렬
1.
//역순 정렬
private static void basicSortDesEx() {
Integer[] scores = {80,50,70,90,75,88,77};
System.out.println("원본 : "+ Arrays.toString(scores));
Arrays.sort(scores, Collections.reverseOrder());
// 배열이 기본 타입이아닌, 랩컨버런스?로 해줘야함 int -> Integer
System.out.println("역순 정렬 : "+ Arrays.toString(scores));
}
private static void basicSortEx() {
int[] scores = {80,50,70,90,75,88,77};
System.out.println("원본 : "+ Arrays.toString(scores));
Arrays.sort(scores);
System.out.println("Sort정렬 : "+ Arrays.toString(scores));
}
2.
private static void customClassSort() {
Member[] members = {
new Member("홍길동"),
new Member("고길동"),
new Member("장길산"),
new Member("임꺽정")
};
System.out.println("원본 : "+ Arrays.toString(members));
Arrays.sort(members); // 런타임 에러 -> cannot be cast to class java.lang.Comparable
System.out.println("정렬 : "+ Arrays.toString(members));
Arrays.sort(members, Collections.reverseOrder());;
System.out.println("역순 정렬 : "+ Arrays.toString(members));
}
package com.javaex.api.array;
public class Member implements Comparable {
String name;
public Member(String name) {
this.name = name;
}
@Override
public String toString() {
return "Member [name=" + name + "]";
}
// ComparTo를 오버라이딩 해줘야한다.
@Override
public int compareTo(Object o) {
// 0 : 두 객체의 순번이 같다.
// 음수 : 순서가 앞이다.
// 양수 : 순서가 뒤다.
if(o instanceof Member) {
Member other = (Member)o;
return name.compareTo(other.name);
}
return 0;
}
}
다른 방법으론
private static void customClassSort() {
Member[] members = {
new Member("홍길동"),
new Member("고길동"),
new Member("장길산"),
new Member("임꺽정")
};
System.out.println("원본 : "+ Arrays.toString(members));
Arrays.sort(members); // 런타임 에러 -> cannot be cast to class java.lang.Comparable
System.out.println("정렬 : "+ Arrays.toString(members));
// Arrays.sort(members, Collections.reverseOrder());;
Arrays.sort(members, new Comparator<Member>() {
@Override
public int compare(Member o1, Member o2) {
return o1.name.compareTo(o2.name);
}
});
System.out.println("역순 정렬 : "+ Arrays.toString(members));
}
Comparetor<Member>를 사용한다.
검색
이진 검색
- 미리 정렬이 되어 있어야 한다.
private static void bsicSearch() { int [] scores = {80,50,70,90,75,88,77}; // 이진 검색 방식은 미리 정렬이 되어 있어야 한다. Arrays.sort(scores); System.out.println("원본 : " + Arrays.toString(scores)); int index = Arrays.binarySearch(scores,75); // 75가 몇 번째 인덱스? System.out.println("75가 있는 인덱스 : "+ index); }
'study > JAVA 전문가' 카테고리의 다른 글
자료구조 1 (0) | 2021.12.09 |
---|---|
Wrapper Class, 제너릭, ,, (0) | 2021.12.08 |
얕은 복제, 깊은 복제 (0) | 2021.12.07 |
인터페이스 (0) | 2021.12.07 |
예외 (0) | 2021.12.07 |