자바 의 Collections 도구 류 및 Comparator 와 Comparable 의 차이
자바 는 Collection 류 의 인 스 턴 스 대상 을 처리 하기 위해 Collections 도구 류 를 제공 합 니 다.이 종 류 는 도구 류 이 고 내 부 는 모두 static 방법 이다.흔히 볼 수 있 는 몇 가지 사용 을 살 펴 보 자.
Collections.sort()
질서 있 는 List 를 정렬 합 니 다.정렬 규칙 을 사용자 정의 할 수 있 습 니 다.가장 기본 적 인 사용 보기:
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList arr = new ArrayList<>();
arr.add(3);
arr.add(1);
arr.add(4);
arr.add(2);
System.out.println(arr); // [3, 1, 4, 2]
Collections.sort(arr);
System.out.println(arr); // [1, 2, 3, 4]
}
}
정렬 규칙 이 지정 되 지 않 으 면 기본 정렬 에 따라 정렬 합 니 다.사용자 정의 규칙 의 예 를 보십시오.
public class Main {
public static void main(String[] args) {
ArrayList arr = new ArrayList<>();
arr.add(3);
arr.add(1);
arr.add(4);
arr.add(2);
System.out.println(arr); // [3, 1, 4, 2]
Collections.sort(arr, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
System.out.println(arr); // [4, 3, 2, 1]
}
}
Comparator 는 인터페이스 로 내부 의 compare 방법 을 실현 하면 주어진 규칙 에 따라 정렬 할 수 있 습 니 다.
위 정렬 예 에서 new Comparator () {} 는 자바 의 내부 익명 류 이 며, 자체 인 터 페 이 스 는 new 를 직접 사용 할 수 없습니다. 이것 은 실제 new 가 이 인터페이스의 실현 류 임 을 나타 냅 니 다.
Comparator 와 Comparable 의 차이
상기 예 에서 Comparator 를 사 용 했 는데 전자 와 마찬가지 로 Comparable 도 하나의 인터페이스 이다. 이들 이 나타 내 는 다른 점 은 다음 과 같다.
예 를 들 어 정렬 할 수 있 는 클래스 를 만 듭 니 다.
package com.DeeJay;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList arr = new ArrayList<>();
arr.add(new SortDemo(3));
arr.add(new SortDemo(1));
arr.add(new SortDemo(2));
arr.add(new SortDemo(4));
System.out.println(arr); // [sortDemo_3, sortDemo_1, sortDemo_2, sortDemo_4]
Collections.sort(arr);
System.out.println(arr); // [sortDemo_1, sortDemo_2, sortDemo_3, sortDemo_4]
}
}
class SortDemo implements Comparable {
int num;
public SortDemo(int num) {
this.num = num;
}
@Override
public int compareTo(Object o) {
SortDemo s = (SortDemo) o;
if(this.num < s.num) {
return -1;
}else if(this.num > s.num) {
return 1;
}
return 0;
// return this.num - s.num;
// return this.num - s.num;
}
@Override
public String toString() {
return "sortDemo_" + this.num;
}
}
상기 예 에서 SortDemo 류 는 Comparable 인터페이스 1 을 실현 하고 compare To 방법 을 재 작성 하여 SortDemo 류 의 인 스 턴 스 대상 이 서로 비교 하여 정렬 할 수 있 도록 합 니 다. 직접 호출
Collections.sort()
하면 실 현 된 compare To 방법 에 따라 정렬 할 수 있 습 니 다. 추가 적 인 비교 논 리 를 입력 하지 않 아 도 됩 니 다.상기 상황 에 대해 직접 쓸 수 없다
return this.num - s.num;
. 예 를 들 어 byte a = -128; byte b = 1; System.out.println((byte) a - b); // 127
다시 컴 파 레이 터 를 사용 하 는 예 를 들 어, 이번 에는 우리 의 SortDemo 클래스 가 정렬 을 지원 하지 않 습 니 다. 컴 파 레이 터 를 실현 하 는 내부 익명 클래스 를 호출 하여 정렬 규칙 을 지정 합 니 다.package com.DeeJay;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
ArrayList arr = new ArrayList<>();
arr.add(new SortDemo(3));
arr.add(new SortDemo(1));
arr.add(new SortDemo(2));
arr.add(new SortDemo(4));
System.out.println(arr); // [sortDemo_3, sortDemo_1, sortDemo_2, sortDemo_4]
Collections.sort(arr, new Comparator() { //
@Override
public int compare(SortDemo o1, SortDemo o2) {
return o1.num - o2.num;
}
});
System.out.println(arr); // [sortDemo_1, sortDemo_2, sortDemo_3, sortDemo_4]
}
}
class SortDemo{
int num;
public SortDemo(int num) {
this.num = num;
}
@Override
public String toString() {
return "sortDemo_" + this.num;
}
}
Collections.binarySearch
지정 한 List 와 key 의 index 를 되 돌려 줍 니 다.이 방법 에 대해 주의 할 점 이 있 습 니 다.
검색 을 하려 면 Collections. sort () 를 호출 하여 자 연 스 러 운 순서 로 정렬 해 야 합 니 다. 그렇지 않 으 면 되 돌아 오 는 결과 에 문제 가 있 을 수 있 습 니 다. Collections. sort () 를 호출 하려 면 List 내부 의 유형 이 Comparable 인 터 페 이 스 를 실현 하도록 해 야 합 니 다.
Integer 라 는 자바 에 대해 서 는 이미 Comparable 클래스 를 실현 하 였 으 며, 처리 하지 않 아 도 되 지만, 우리 가 정의 한 클래스 는 Comparable 을 실현 해 야 합 니 다.
package com.DeeJay;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList arr = new ArrayList<>();
arr.add(3);
arr.add(1);
arr.add(2);
arr.add(4);
Collections.sort(arr); // binarySearch sort
System.out.println(Collections.binarySearch(arr, 3));
}
}
Collections.copy(destList, targetList)
이 방법 이 주의해 야 할 점 은 목적 List 의 길이 가 복 제 될 targetList 보다 짧 지 않도록 해 야 한 다 는 것 이다.
package com.DeeJay;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList arr = new ArrayList<>();
arr.add(3);
arr.add(1);
arr.add(2);
arr.add(4);
ArrayList arr2 = new ArrayList<>();
arr2.add(null);
arr2.add(null);
arr2.add(null);
arr2.add(null);
Collections.copy(arr2, arr);
System.out.println(arr2); // [3, 1, 2, 4]
}
}
Collections.fill() Collections.reverse() Collections.shuffle()
package com.DeeJay;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList arr = new ArrayList<>();
arr.add(3);
arr.add(1);
arr.add(2);
arr.add(4);
Collections.sort(arr);
System.out.println(arr);// [1, 2, 3, 4]
Collections.reverse(arr);
System.out.println(arr); // [4, 3, 2, 1]
Collections.shuffle(arr);
System.out.println(arr); // [1, 3, 2, 4]
Collections.fill(arr, null);
System.out.println(arr); // [null, null, null, null]
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.