我有两个来自用户的名字。
我想比较它们并按字母顺序显示它们。
我尝试了 compareTo 方法,但它只返回一个 int。
编辑:找到答案!再次感谢各位!
你说:“我必须命名”——假设你的意思是“我有两个名字”......
如果您有两个字符串,那么您只有两种可能的方式可以返回它们。它可以是 A、B 或 B、A。这两个字符串的排序方式只有三种。
任何一个:
事实证明,根据Java 文档,该String.compareTo()
方法实际上为您提供了一个映射到这三种可能状态的值:
如果此 String 对象按字典顺序位于参数字符串之前,则结果为负整数。如果此 String 对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;当 equals(Object) 方法返回 true 时,compareTo 返回 0。
最简单的方法是将它们存储在一个数据结构中,例如TreeSet
它固有地对它们的内容进行排序(通常通过compareTo
内部调用)。
否则,还有Collections.sort
静态方法对现有的List
.
Java 内置了一些排序方法。尝试将名称放入数组并使用Array sort。
您需要对它们进行排序( compareTo 方法为排序算法提供了它需要知道什么在什么之前发生的信息)。要对它们进行排序,您需要将它们放在 List 中,然后使用 Collections.sort() 方法。
这是一个给你的例子,假设你有两个以上的名字,尽管它也适用于这个:
// Create a list
String[] strArray = new String[] {"z", "a", "C"};
List list = Arrays.asList(strArray);
// Sort
Collections.sort(list);
// C, a, z
// Case-insensitive sort
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
// a, C, z
// Reverse-order sort
Collections.sort(list, Collections.reverseOrder());
// z, a, C
// Case-insensitive reverse-order sort
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(list);
// z, C, a
如果您只有两个名称,请使用 compareTo() 方法。如果您有很多,请使用其他解决方案(将它们添加到列表并对其进行排序)。
总是喜欢“Arrays.asList(strArray);” 到“new ArrayList()”,当不可能时,为了性能,在构造函数上指定列表大小。