Java - 如何制作可比较的字符串数组

时间:2015-09-13 21:31:22

标签: java string comparable

我觉得这是一个简单的问题,但我无法在线找到写入格式。 我将如何制作可比较的字符串数组?

像这样:

Comparable<String> = {"A", "C", "J", "O", "Z"};

或者我是这样开始的:

Comparable<String> = new Comparable<String>(); 

类似于arraylist,我不确定。

我正在使用Comparable接口,所以我可以声明两个列表,一个是int的字符串之一,我可以使用特定的排序算法对它们进行排序,我当前的问题是如何初始化数组

由于

3 个答案:

答案 0 :(得分:1)

您无需创建Comparable的实例。因为String类已经实现了这个接口,所以你只需调用方法.compareTo(String otherString)

即可
ArrayList<String> myList = new ArrayList<String>();
myList.add("hello");
myList.add("hello");
System.out.println(myList.get(0).compareTo(myList.get(1))); //prints out 0

您可以像往常一样填充列表

答案 1 :(得分:1)

Comparable<T>interface,因此您无法直接声明该类型的任何内容。 Comparable的正常习惯用法是,如果您声明自己的类具有可比性,则声明如下:

class MyClass implements Comparable<MyClass> {
    // ... other fields, methods

    @Override
    public int compareTo(MyClass other) {
        ... something that returns <0, 0 or >0
    }
}

如果您查看语言对String here的定义,您会发现String已经实现了Comparable<String>。因此,String已经具有可比性,并且已经有compareTo方法。你不需要做任何其他事情来使它具有可比性。

要设置数组,语法为

String[] myArray = {"A", "C", "J", "O", "Z"};

要设置ArrayList(可以增长或缩小),

ArrayList<String> myList = new ArrayList<>(Arrays.asList("A", "C", "J", "O", "Z"));

答案 2 :(得分:1)

OP的目的不明确,但如果问题的目的是如何创建一个Comparable的数组 - 因为它是一个数组未实现的接口,并且因为数组不能被覆盖 - 它根本不可能。

但是,可以使用Comparator作为特定类型,以便比较该类型的两个实例。

Google Guava的com.google.common.primitives包中的大多数类都有一个静态lexicographicalComparator()方法,为类处理的基本类型的数组返回Comparator

Guava目前没有针对Object数组的类似解决方案,但如果您可以使用Iterable代替现有Ordering上的静态Comparators.lexicographical(Comparator)Ordering.lexicographical()帮助

根据我所理解的OP的意图,让我们假设我们有两个数组:

String[] arr1 = {"A", "C", "J", "O", "Z"};
String[] arr2 = {"A", "C", "J", "O", "X"}; // different last element

我们现在可以使用Ordering.lexicographical()比较这两个数组:

        int comparison = Ordering.natural()
                .lexicographical().compare(Arrays.asList(arr1), Arrays.asList(arr2));

结果将是正数,因为arr1被认为大于arr2,因为arr1中第一个元素与arr2中的相应元素不相等,根据Ordering.natural()更大。