2017-11-16 3 views
3

バブルソート用のコードをどのように修正して文字列にも再利用できますか?または、文字列を排他的にソートするための全く新しいクラスを作成する必要がありますか?ありがとう!同じJavaクラス(バブルソート)を使用して整数と文字列を並べ替える

MAIN CLASS

public class BubbleSortTest { 

    public static void main(String[] args) { 
     Integer[] integers = {25, 15, 45, 5, 40, 50, 10, 20, 35, 30}; 
     ArrayUtility.display(integers); 
     BubbleSort.sort(integers); 
     ArrayUtility.display(integers); 

     String[] strings = {"def", "efg", "bcd", "abc", "fgh", "cde", null}; 
     ArrayUtility.display(strings); 
     BubbleSort.sort(strings); 
     ArrayUtility.display(strings); 
    } 
} 

SORTのCLASS:

public class BubbleSort { 

    public static void sort(Integer[] numbers) { 
     Integer temp; 

     for (Integer i = 0; i < numbers.length; i++) { 
      for (Integer j = 1; j < (numbers.length) - i; j++) { 
       if (numbers[j - 1] > numbers[j]) { 

        //SWAPPING ELEMENTS 
        temp = numbers[j - 1]; 
        numbers[j - 1] = numbers[j]; 
        numbers[j] = temp; 
       } 
      } 
     } 
    } 
} 
+4

google 'Java generics'、または 'Comparable'などと入力してください。 – Stultuske

+0

['TreeSet'](https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#TreeSet(java.util.Comparator))。 (ジェネリックス+コンパレータ) – JimmyB

答えて

1

あなたはGeneric Typesを使用することができます。このような

何かが有効である可能性があり:

public static <E extends Comparable<E>> void bubbleSort(E[] unsorted) { 
     for(int iter =1; iter< unsorted.length; iter++){ 
      for(int inner = 0; inner < (unsorted.length - iter); inner ++){ 
       if(unsorted[inner].compareTo(unsorted[inner+1]) > 0){ 
        E tmp = unsorted[inner]; 
        unsorted[inner] = unsorted[inner + 1]; 
        unsorted[inner + 1] = tmp; 
       }     
      } 
     } 
    } 

この意味は、Comparableを実装している限り、このメソッドは任意の型の配列で動作します。どんなタイプであれ、それは方法全体を通してEとして使用されます。コンパイラはEComparableであることを知っているので、コンパイラはこのタイプのオブジェクトが.compareTo(...)であることを認識します。

+6

'>'キャストは不要で安全です。 –

+0

@JoopEggenが正しく示唆したものを使うために編集の自由を取った。 – slim

+0

非常に良い答えですが、私は引数が「ソートされていません」と呼ぶことはありません。 – DodgyCodeException

関連する問題