자바의 정석을 통해 공부한 내용을 요약하였습니다.
int[] arr = {1,2,3,4,5};
int[] arr2 = Arrays.copyOf(arr, 3); // arr2 = [1,2,3]
int[] arr3 = Arrays.copyOfRange(arr,1,4); // arr3 = [2,3,4];
int[] arr = new int[5];
Arrays.fill(arr,7); // arr = [7,7,7,7,7]
Arrays.setAll(arr, () -> (int)(Math.random()*5)+1); // arr = [1,4,2,3,5] 랜덤 값
List list = new ArrrayList(Arrays.asList(1,2,3,4,5)); // 배열을 List로 변환한 후 ArrayList로 생성하면 수정 가능
컬렉션을 정렬하는데 필요한 메서드를 정의하고 있는 인터페이스
public interface Comparator{
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
public interface Comparable{
public int compareTo(Object o);
}
static void sort(Object[] a) // 객체 배열에 저장된 객체가 구현한 Comparable에 의한 정렬
static void sort(Object[] a, Comparator c) // 지정한 Comparator에 의한 정렬
정렬은 두 대상을 비교해서 자리바꿈을 반복하는 것이다.
정렬 방법은 바뀌지 않는다 다만, 정렬 기준은 변할 수 있다.
버블 정렬을 예로 들어보자
정렬 대상이나 정렬 기법이 바뀌어도 기법에 따른 정렬 방법은 바뀌지 않는다.
바뀌는 부분은 오직 정렬 기준만 바뀐다.(오름차순 or 내림차순)
static void sort(int[] intArr) {
for(int i=0; i<intArr.length-1; i++) {
for(int j=0; j<intArr.length-1-i; j++) {
int tmp = 0;
if(intArr[j] > intArr[j+1]) { // 정렬 기준
tmp = intArr[j];
intArr[j] = intArr[j+1];
intArr[j+1] = tmp;
}
}
}
}
static void sort(Object[] objArr, Comparator c) {
for(int i=0; i<objArr.length-1; i++) {
for(int j=0; j<objArr.length-1-i; j++) {
int tmp = 0;
if(c.compare(objArr[j], objArr[j+1])>0) { // 정렬 기준
tmp = objArr[j];
objArr[j] = objArr[j+1];
objArr[j+1] = tmp;
}
}
}
}
위 코드와 같이 코드를 변경하지 않고 Comparator를 구현한 클래스만 바꿔주어
정렬기준을 바꿀 수 있다.