Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?
答案是可以使用 Java 泛型。
使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。
Comparable 是一个泛型接口, 本文提供一个泛型方法,对一个Comparable对象数组进行排序。这些对象是comparable接口的实例,他们使用compareTo方法进行比较。
泛型类型定义为<E extends Comparable <E>>
这里有两个含义,首先它指定E是Comparable的子类型;其次,它还指定进行比较的元素是E类型。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import java.lang.String; public class GenericSort { public static void main(String[] args){ //Create array Integer[] intArray = {new Integer(2),new Integer(4),new Integer(3)}; Double[] doubleArray = {new Double(3.4),new Double(1.3),new Double(-22.1)}; Character[] charArray = {new Character('a'),new Character('J'),new Character('r')}; String[] stringArray = {"Tom","Susan","Kim"}; //Sort the arrays sort(intArray); sort(doubleArray); sort(charArray); sort(stringArray); //Display the sorted arrays System.out.print("Sorted Integer objects: "); printList(intArray); System.out.print("Sorted Double objects: "); printList(doubleArray); System.out.print("Sorted Char objects: "); printList(charArray); System.out.print("Sorted String objects: "); printList(stringArray); } public static <E extends Comparable<E>> void sort(E[] list){ //泛型类型定义为<E extends Comparable <E>> //这里有两个含义,首先它指定E是Comparable的子类型;其次,它还指定进行比较的元素是E类型的 E currentMin; int currentMinIndex; for(int i = 0; i < list.length - 1; i++){ //Find the minimum in the list currentMin = list[i]; currentMinIndex = i; for(int j = i + 1; j < list.length; j++){ if (currentMin.compareTo(list[j]) > 0){ currentMin = list[j]; currentMinIndex = j; } } if (currentMinIndex != i){ list[currentMinIndex] = list[i]; list[i] = currentMin; } } } //print public static void printList(Object[] list){ for(int i = 0; i < list.length; i++) System.out.print(list[i] + " "); System.out.println(); } } |