【问题标题】:Sort integers and strings using the same java class (Bubble Sort)使用相同的 java 类对整数和字符串进行排序(冒泡排序)
【发布时间】:2018-04-29 20:40:39
【问题描述】:

如何修改我的整数冒泡排序代码,以便我也可以将其重新用于字符串?或者我是否需要创建一个全新的类来专门对字符串进行排序。谢谢!

主类

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

排序类:

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;
                }
            }
        }
    }
}

【问题讨论】:

  • google 'Java generics',或者,传递类型 'Comparable' 或类似的
  • 看看它是如何完成的,例如TreeSet。 (泛型 + 比较器)

标签: java string class sorting bubble-sort


【解决方案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(...)

【讨论】:

  • &lt;E extends Comparable&lt;E&gt;&gt; 并且不需要演员表并且一切安全。
  • 我冒昧地编辑使用@JoopEggen 正确建议的内容。
  • 非常好的答案,但我不会将参数称为“未排序”,因为它不会长时间保持未排序状态。
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2020-04-21
  • 2021-08-13
  • 1970-01-01
  • 2018-02-25
相关资源
最近更新 更多