LinkedHashSet迭代不按升序排列?

JJ *_*Liu 0 java collections linkedhashset data-structures

在以下代码中,如果参数为{1,3,2},则在while循环中,i为1,3,2.

我已经在使用LinkedHashSet,为什么订单不是1,2,3?我还需要做什么才能按升序进行迭代?

无法在o(log n)时间内使用TreeSetadd, remove, contains().

public static void iterate(int[] num) {
    LinkedHashSet<Integer> set = new LinkedHashSet<Integer>();

    for (int i : num) {
        set.add(i);
    }

    Iterator<Integer> iter = set.iterator();
    while (iter.hasNext()) {
        // WHY IS i THE SAME ORDER AS INSERATION ORDER, NOT ASSENDING ORDER?
        int i = iter.next();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ice*_*ind 5

因为LinkedHashSet按插入顺序迭代并且没有排序!来自javadoc:

此实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表.此链接列表定义迭代排序,即元素插入集合(插入顺序)的顺序.

您将要使用TreeSet作为有序集,请查看已排序集javadoc:https://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html