1

次のコードのsortメソッドを変更して、文字列だけでなく、少し困惑している任意のタイプのオブジェクトを並べ替えようとしています。すべてのアドバイスを歓迎します。

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]);
}
}
4

5 に答える 5

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
}
于 2012-08-21T11:56:57.520 に答える
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;
            }
        }
    }
}
于 2012-08-21T12:02:53.730 に答える
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]);
    }
  }
于 2012-08-21T12:00:27.090 に答える
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つの文字列をソートするために使用できます(文字列の数はプログラマーが増やすことができます)

于 2012-08-25T07:35:10.693 に答える
-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]);
}
}
于 2012-08-21T11:58:58.593 に答える