本人尝试写一个排序的泛型方法,结果因为需要用到compareTo。但在编译器编译的时候发现,并不能使用。
后来翻书的时候发现,需要将<T>写成<T extends Comparable>,才能使用compareTo函数!
而对于泛型构造数组,不能用new<T>来构造,只能用
str=(T[])Array.newInstance(a.getClass().getComponentType(),a.length);进行构造
而泛型类的初始化,则用
sorts<String>sort1=new sorts<>(str);
对于泛型,若要使用compareTo,则不能用int类,得用Integer类
Integer[] number=new Integer[lo];
以快速排序为例,源代码如下!
import java.lang.reflect.Array; import java.util.Arrays; import java.util.Scanner; class sorts<T extends Comparable> { T[] str; sorts(T[]a){ str=(T[])Array.newInstance(a.getClass().getComponentType(),a.length); for(int i=0;i<a.length;i++)str[i]=a[i]; } int find_mid(int lo,int hi) { // System.out.println("222"); T temp =str[lo]; // System.out.println("111"); while(lo<hi) { while(lo<hi&&temp.compareTo(str[hi])<=0)hi--; if(lo<hi)str[lo++]=str[hi]; while(lo<hi&&temp.compareTo(str[lo])>=0)lo++; if(lo<hi)str[hi--]=str[lo]; } str[lo]=temp; return lo; } void quick_sort(int lo,int hi){ if(hi-lo<1)return; int mi=find_mid(lo,hi-1); quick_sort(lo,mi); quick_sort(mi+1,hi); } } public class Main{ public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt(); String[] str=new String[n]; String unuse=in.nextLine(); for(int i=0;i<n;i++) str[i]=in.nextLine(); // Arrays. sorts<String>sort1=new sorts<>(str); // System.out.println(sort1.str.length); sort1.quick_sort(0,str.length); // for(String t:sort1.str)System.out.println(t); //判断数字字符串的个数 String num; int lo=-1; do { num=sort1.str[++lo]; } while(num.compareTo("A")<0); Integer[] number=new Integer[lo]; for(int i=0;i<lo;i++){ number[i]=Integer.parseInt(sort1.str[i]); } sorts<Integer>sort2=new sorts<>(number); sort2.quick_sort(0,number.length); // Arrays.sort(number); for(int i=0;i<lo;i++)System.out.println(sort2.str[i]); for(int i=lo;i<n;i++)System.out.println(sort1.str[i]); } }
相关文章:
以上就是java中使用泛型方法的案例详解的详细内容,更多请关注php中文网其它相关文章!
已抢65124个
抢已抢28581个
抢已抢15450个
抢已抢7751个
抢已抢9653个
抢已抢19644个
抢