我希望在运行时找到一种方法,判断集合是否有序。有什么方法可以做到吗?
编辑:非常抱歉我之前的问题描述有误。我的意思是,是否有一种通用的方式来表明 HashMap 不存储插入元素的顺序,而 LinkedHashMap 则会存储。
我希望在运行时找到一种方法,判断集合是否有序。有什么方法可以做到吗?
编辑:非常抱歉我之前的问题描述有误。我的意思是,是否有一种通用的方式来表明 HashMap 不存储插入元素的顺序,而 LinkedHashMap 则会存储。
对于实现了 Comparable
接口的元素,您可以检查它们是否处于它们的“自然”顺序。
public static <T extends Comparable<? super T>> boolean isOrdered(Iterable<T> list) {
Iterator<T> i = list.iterator();
if (i.hasNext()) {
T previous = i.next();
while (i.hasNext()) {
T current = i.next();
if (previous.compareTo(current) > 0)
return false;
previous = current;
}
}
return true;
}
Comparator
,并将其传递给测试。public static <T> boolean isOrdered(Iterable<T> list, Comparator<? super T> c) {
Iterator<T> i = list.iterator();
if (i.hasNext()) {
T previous = i.next();
while (i.hasNext()) {
T current = i.next();
if (c.compare(previous, current) > 0)
return false;
previous = current;
}
}
return true;
}
compare()
方法。 - Sled return Ordering.natural().isOrdered(collection);
return Ordering.from(comparator).isOrdered(collection);
假设它是一个List
,这应该可以解决问题 :-)
它比较每个项目(除了最后一个 - 它将由倒数第二个项目检查),并检查下一个项目是否更小。如果是这种情况,则它没有排序。
for (int i = 0; i < collection.size() - 1; i++)
{
if (collection.get(i).compareTo(collection.get(i+1)) > 0)
{
// NOT SORTED
break;
}
}
>
替换为compareTo()
,并检查它是否大于0。 - Eng.Fouad