Java - 一种了解集合是否有序的方法

时间:2012-01-19 18:30:40

标签: java collections

我正在寻找一种方法来查找运行时,是否订购了集合。有什么办法吗?

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

3 个答案:

答案 0 :(得分:4)

对于实现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;
}

答案 1 :(得分:2)

使用可爱且受欢迎的Guava libraries,它是一个高度可读的单行内容:

 return Ordering.natural().isOrdered(collection);

如果您的元素是根据其他比较器排序的,而不是它们的自然顺序:

 return Ordering.from(comparator).isOrdered(collection);

答案 2 :(得分:1)

假设它是List ,应该这样做: - )

它比较每个项目(最后一项 - 它将由第二项最后一项检查)并检查下一项是否较小。如果是这种情况,则不会对其进行排序。

for (int i = 0; i < collection.size() - 1; i++)
{
    if (collection.get(i).compareTo(collection.get(i+1)) > 0)
    {
        // NOT SORTED

        break;
    }
}