java中,使用泛型方法,如何比较大小

本人尝试写一个排序的泛型方法,结果因为需要用到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]);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值