排序任何类型的对象,java

时间:2012-08-21 11:54:10

标签: java arrays sorting

我试图在以下代码中更改排序方法,以排序任何类型的对象,而不仅仅是字符串,但有点难过,欢迎所有建议。

class SortNames {

static void sort(String[] s) {
    for (int i = 0; i<s.length; i++) {
        for (int j = i+1; j < s.length; j++) {
            if (s[i].compareTo(s[j])>0) {
                String t;
                t = s[i]; s[i] = s[j]; s[j] = t;
            }
        }
    }
}

public static void main(String[] args) {
    String[] names = {"Pete","Jill","May","Anne","Tim"};             
    sort(names);
    for (int i=0; i<names.length; i++) 
        System.out.println(names[i]);
}
}

5 个答案:

答案 0 :(得分:5)

SortNames变为SortNames<T extends Comparable<? super T>>,然后将String[]更改为T[],这就是Collections.sort()的工作方式:

public class SortNames<T extends Comparable<? super T>> {
    public void sort(T[] s) {
        for (int i = 0; i<s.length; i++) {
            for (int j = i+1; j < s.length; j++) {
                if (s[i].compareTo(s[j])>0) {
                    T t = s[i]; s[i] = s[j]; s[j] = t;
                }
            }
        }
    }
    // or static <T extends Comparable<? super T>> void, for static methods
}

答案 1 :(得分:3)

如果要对数组进行排序,可以使用Arrays.sort(yourArray);

如果你真的想用你的算法重新实现它(假设它有效),你只需要改变一些东西:

static <T extends Comparable<? super T>> void sort(T[] s) {
    for (int i = 0; i < s.length; i++) {
        for (int j = i + 1; j < s.length; j++) {
            if (s[i].compareTo(s[j]) > 0) {
                T t;
                t = s[i];
                s[i] = s[j];
                s[j] = t;
            }
        }
    }
}

答案 2 :(得分:0)

你接受String []来排序方法,它永远不会是通用的。

 static void sort(String[] s)

您是否认为相对于集合的排序方法有任何优势。

public static <T extends Comparable<? super T>> void sort(List<T> list) {
    Object[] a = list.toArray();
    Arrays.sort(a);
    ListIterator<T> i = list.listIterator();
    for (int j=0; j<a.length; j++) {
        i.next();
        i.set((T)a[j]);
    }
  }

答案 3 :(得分:0)

class City {
   public static void main (String args[])
   { 
     int i,j;
     String temp;
     String s[] = new String[6];
     for(i=0; i<6; i++)
       s[i]=args[i];
     for(i=0;i<6;i++) {
       for(j=0;j<6-i-1;j++) {
         if(s[j].compareTo(s[j+1])>0)
         {
           temp=s[j];
           s[j]=s[j+1];
           s[j+1]=temp;
         } 
       }
     }
     for(i=0; i<6; i++) {
       System.out.println(s[i]);
     }
   }
}   

这个概念可以用来排序任何6个字符串(字符串的数量可以由程序员增加)

答案 4 :(得分:-3)

您只需要实现与您需要排序的对象的类似接口,并对上面的代码进行一些更改,以使此代码可用于任何其他对象。

class SortNames {

static void sort(Comparable[] s) {
    for (int i = 0; i<s.length; i++) {
        for (int j = i+1; j < s.length; j++) {
            if (s[i].compareTo(s[j])>0) {
                Comparable t;
                t = s[i]; s[i] = s[j]; s[j] = t;
            }
        }
    }
}

public static void main(String[] args) {
    String[] names = {"Pete","Jill","May","Anne","Tim"};             
    sort(names);
    for (int i=0; i<names.length; i++) 
        System.out.println(names[i]);
}
}