>  기사  >  Java  >  제네릭을 사용하여 Java에서 배열 정렬을 구현하는 방법

제네릭을 사용하여 Java에서 배열 정렬을 구현하는 방법

WBOY
WBOY앞으로
2023-05-16 16:22:061019검색

1. 정수 배열의 순차 축소

public static int seqSearch(int[] arr, int first, int last, int target) {        for (int i = first; i < last; i++)            if (arr[i] == target)                return i;            return -1;    }

1.1 위의 방법을 추상화하면 ***Java의 Object 참조를 사용하여 일반적인 방법을 구현한다고 생각해보자

public static int seqSearch(Object[] arr, int first, int last, Object target) {        for (int i = first; i < last; i++)            if (arr[i].equals(target))                return i;            return -1;    }

2.1 Object 참조와 비슷해 매우 편리하고, 두 번째 순차 검색에서는 float, double, String 등을 사용할 수 있습니다. 더 공부하면 문제가 발생합니다

public static void selectionSort(int[] arr) {        int n = arr.length, smallIndex = 0;        for (int i = 0; i < n; i++) { // 遍历array数组            smallIndex = i;            for (int j = i + 1; j < n; j++)                if (arr[smallIndex] > arr[j]) // 选择最小的索引j                    smallIndex = j;            // if (smallIndex != i) {            exchange(arr, i, smallIndex);// 交换array[i]与 min(array[i+1,..,n])            // }        }    }

2.2 위 코드는 순차 정렬 알고리즘입니다. 일반적인 메소드를 작성하려면 Comparable 인터페이스를 구현하는 메소드에 객체 유형을 강제해야 합니다.

JVM은 유형 강제 변환을 처리할 때 경고를 표시합니다. Cast를 선택 해제하세요

@SuppressWarnings("unchecked")    public static void selectionSort(Object[] arr) {            int n = arr.length, smallIndex = 0;        for (int i = 0; i < n; i++) { // 遍历array数组            smallIndex = i;            for (int j = i + 1; j < n; j++)                if (((Comparable<Object>)arr[smallIndex]).compareTo(((Comparable<Object>)arr[j])) > 0) // 选择最小的索引j                    smallIndex = j;            // if (smallIndex != i) {            exchange(arr, i, smallIndex);// 交换array[i]与 min(array[i+1,..,n])            // }        }    }

실제 매개변수를 사용할 때 Comparable 인터페이스가 구현되지 않으면 컴파일러가 일반적인 문제를 처리하기 위해 객체 참조를 사용한다는 것을 알 수 있습니다. will CastClassException 런타임 예외를 발생시킵니다. 그러한 프로그램은 안전하지 않습니다.

3.1 객체 참조를 사용하여 알고리즘(예: 순차 검색)을 일반화합니다. 객체 참조와 배열의 대상 값을 사용하여 데이터 유형이 equals 메소드를 구현하는 한 알고리즘에서 비교할 데이터 클래스는 Comparable 인터페이스를 구현해야 합니다. 이제 이 문제를 해결하기 위해 Java 제네릭을 사용하겠습니다.

public static <T extends Comparable<? super T>> void selectionSort(T[] arr){        int n = arr.length;        int smallIndex;        for (int i = 0; i < n-1; i++) {            smallIndex=i;            for (int j = i+1; j < n; j++)                 if (arr[j].compareTo(arr[smallIndex])<0)                     smallIndex=j;            exchange(arr, smallIndex, i);        }    }
Arrays 클래스의 정적 메소드 SelectionSort()에서 이 메소드는 정수 유형을 처리합니다. 이 알고리즘을 구현하기 위해 제네릭 버전을 사용하려면 제네릭 유형 배열 T[]의 두 요소를 비교해야 하므로 실제 매개변수를 전달하는 객체 유형이나 해당 슈퍼클래스는 Comparable 인터페이스를 구현해야 합니다.

위 내용은 제네릭을 사용하여 Java에서 배열 정렬을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제