Java - 一种确定集合是否有序的方法

Jar*_*rek 4 java collections

我正在寻找一种在运行时找出集合是否已排序的方法。有没有办法做到这一点?

编辑:我很抱歉问错了问题。我的意思是是否有一些通用的方法可以说 HashMap 不存储被插入元素的顺序,而 LinkedHashMap 可以。

eri*_*son 5

对于实现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;
}
Run Code Online (Sandbox Code Playgroud)

否则,您必须定义一个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;
}
Run Code Online (Sandbox Code Playgroud)