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