我觉得这是一个简单的问题,但我无法在线找到写入格式。 我将如何制作可比较的字符串数组?
像这样:
Comparable<String> = {"A", "C", "J", "O", "Z"};
或者我是这样开始的:
Comparable<String> = new Comparable<String>();
类似于arraylist,我不确定。
我正在使用Comparable接口,所以我可以声明两个列表,一个是int的字符串之一,我可以使用特定的排序算法对它们进行排序,我当前的问题是如何初始化数组
由于
答案 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()
更大。