本人尝试写一个排序的泛型方法,结果因为需要用到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];
以快速排序为例,源代码如下!
立即学习“Java免费学习笔记(深入)”;
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中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号