我有一个名为account的ArrayList,其中包含字符串。我正在尝试编写一种方法来检查它们是否有序并根据它们是否有序而返回true或false。
你会怎么做?我已经尝试用for-loop检查初始字符但是它非常错误。我创建了一个新的ArrayList并将其设置为等于原始,然后对它进行排序并进行比较,但由于它们包含相同的数据,因此它总是回归真实。
这是一个额外的快速问题,因为我正在为字符串执行此操作,您如何检查某些数字是否按升序/降序排列?是同一个校长?
三江源!
答案 0 :(得分:11)
试试这个(假设你想用自然顺序比较字符串):
String previous = ""; // empty string: guaranteed to be less than or equal to any other
for (final String current: thelist) {
if (current.compareTo(previous) < 0)
return false;
previous = current;
}
return true;
这是因为String
实现了Comparable<String>
,并且将使用字符串的自然顺序进行比较。
答案 1 :(得分:6)
如果你不介意使用外部库(番石榴)Ordering
会这样做:
boolean isSorted = Ordering.natural().isOrdered(list);
这适用于String
和其他Comparables
。如果要检查某些自定义类型的顺序,请使用Ordering
类中的任何静态工厂方法或将其子类化。
编辑以获取不区分大小写的排序:
boolean isSorted = Ordering.from(String.CASE_INSENSITIVE_ORDER).isOrdered(list);
答案 2 :(得分:2)
我认为for循环适合这种情况。我采取的方法是检查每个单词与前一个单词,看看它们是否按正确的字母顺序排列。最好的情况是O(2)确定列表是乱序的,最坏的情况是O(n)告诉你列表是有序的。
编辑:上面的fge答案概述了所述方法的代码。
答案 3 :(得分:0)
只需使用一个循环并检查它们是否有序:
boolean isSorted = true;
for(int i = 0; i < list.size() - 1; i++) {
// current String is > than the next one (if there are equal list is still sorted)
if(list.get(i).compareToIgnoreCase(list.get(i + 1)) > 0) {
isSorted = false;
break;
}
}
答案 4 :(得分:0)
ArrayList<String> initial = // smth
ArrayList<String> copy = // copy initial list here
Collections.sort(initial);
return initial.equals(copy);
答案 5 :(得分:0)
使用Collection类的排序方法:
List<String> list = new ArrayList<String>();
//Add Elements
Collections.sort(list);
按照升序对指定列表按升序排序 其元素的自然排序。