Arrays.sort (t [], 비교기 <? super t> c) 메소드는 사용자 정의 규칙에 따라 객체 배열을 정렬하는 데 사용됩니다.
공식 Java 문서는이 방법의 역할을 간단히 설명하고이를 자세히 소개하지 않습니다. 이 기사는이 방법을 깊이 분석합니다.
1. 간단한 예
정렬 방법의 사용은 매우 간단하고 명확합니다. 다음 예에서 먼저 개 크기를 비교하는 비교기를 정의한 다음 인스턴스 객체를 정렬 메소드로 매개 변수로 전달합니다. 이 예를 통해 Array.Sort ()의 사용을 신속하게 마스터 할 수 있어야합니다.
import java.util.arrays; import java.util.comparator; 클래스 개 {int size; public dog (int s) {size = s;}} class dogsizecomparator emplements comparator <dog> {@overtide public int compart (dog o1, dog o2) {return o1.size -o2.s (public size) {public stize (}}) {public void void void void void void (public class and}). d1 = new Dog (2); dog d2 = new Dog (1); Dog d3 = new Dog (3); Dog [] dogarray = {d1, d2, d3}; printDogs (dogarray); Array.Sort (dogArray, new dogsizecomparator ()); printArray (doglarray); gog System.out.print (d.size + ""); System.out.println ();}}출력은 다음과 같습니다.
2 1 3 1 2 3
2. 정책 모드를 사용하십시오
이것은 전략 패턴의 완벽하고 간결한 예입니다. 이 시나리오에서 전략 모델이 사용하기에 적합한 이유를 언급 할 가치가 있습니다.
일반적으로 정책 패턴을 사용하면 프로그램이 실행될 때 다른 알고리즘을 선택할 수 있습니다. 예를 들어, 정렬 할 때 다른 비교기가 전달되고 다른 알고리즘이 사용됩니다.
위의 예에 따르면, 개의 무게로 정렬하고 싶다고 가정하면 다음과 같이 새로운 비교기를 만들 수 있습니다.
클래스 개 {int size; int weight; public dog (int s, int w) {size = s; weight = w;}} class dogizecomparator emplicates <dogizecomparator emporments <dog intride public int compart (dog o1, dog o2) {return o1.size -size;}} class dogweight comparator <dog <bog int int comparent (dog -o2) {doge o2). o1.weight -o2heweight;}} public class arraysort {public static void main (String [] args) {dog d1 = new Dog (2, 50); Dog d2 = new Dog (1, 30); Dog D3 = New Dog (3, 40); Dog [] dogarray = {d1, d2, d3}; dogarray. dogSizeComparator (); printDogs (dogArray); arrays.sort.SORT (dogArray, new dogweightcopator ()); printDogs (dogArray);} public static void printdogs (dog [] dogs) {for (dog d : dogs) system.out.print ( "size =" + d.size + "weight =" + d.suidge + " "); system.out.println ();}}실행 결과 :
크기 = 2 무게 = 50 크기 = 1 무게 = 30 크기 = 3 무게 = 40 크기 = 1 무게 = 30 크기 = 2 무게 = 50 크기 = 3 무게 = 40 크기 = 1 무게 = 30 크기 = 3 무게 = 40 크기 = 2 무게 = 50
비교기는 인터페이스이므로 정렬 메소드는이 인터페이스를 구현하는 모든 클래스에서 전달 될 수 있으며, 이는 정책 패턴의 주요 아이디어입니다.
3. "슈퍼"를 사용하는 이유
"비교기 <t> c"를 사용하면 이해하기 쉽지만, 두 번째 매개 변수에서 <? supert>는 비교기에 의해 허용되는 유형이 T 또는 슈퍼 클래스 일 수 있음을 의미합니다. 왜 슈퍼 클래스입니까? 답은 : 이것은 동일한 비교기를 사용하여 다른 서브 클래스 객체를 비교할 수 있습니다. 이것은 다음 예에서 명확하게 입증됩니다.
import java.util.arrays; import java.util.comparator; class Animal {int size;} class Dog Extends Animal {public dog (int s) {size = s;}} 클래스 cat extends Animal {public cat (int s) {size = s;}} class Animalizecomparator <animal <alital valecation (Animal o1, o1). o2.size;} // 이런 방식으로, 모든 동물의 모든 부족은이 비교기를 사용할 수 있습니다. 새 동물성 icomparator ()); printdogs (dogarray); System.out.println (); // 고양이 배열이 있으면 동일한 비교기를 사용할 수 있습니다. 고양이 C1 = 새로운 고양이 (2); Cat C2 = 새로운 고양이 (1); 고양이 C3 = 새로운 고양이 (3); Cat [] Catarray = {C1, C2, C3}; 인쇄물 (Catarray); Array.Sort (카타라, 새로운 AnimalsizeComparator ()); printdogs (catarray); System.out.print ( "size =" + a.size + ""); System.out.println ();}}출력 결과 :
크기 = 2 크기 = 1 크기 = 3 크기 = 1 크기 = 2 크기 = 3 크기 = 3 크기 = 2 크기 = 1 크기 = 3 크기 = 1 크기 = 2 크기 = 3
4. 요약
arrays.sort ()와 관련된 정보는 다음과 같이 요약됩니다.
일반 : 슈퍼 클래스 전략 설계 패턴;
병합 정렬 : 시간 복잡성 n*log (n);
java.util.collections#sort (list <t> 목록, 비교기 <? super t> c)는 arrays.sort와 유사한 아이디어를 사용합니다.
요약
위의 내용은 Java의 Array.Sort () 코드에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 웹 사이트에서 다른 Java 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!