JJ *_*Liu 0 java collections linkedhashset data-structures
在以下代码中,如果参数为{1,3,2},则在while循环中,i为1,3,2.
我已经在使用LinkedHashSet,为什么订单不是1,2,3?我还需要做什么才能按升序进行迭代?
无法在o(log n)时间内使用TreeSet
它add, 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)
因为LinkedHashSet按插入顺序迭代并且没有排序!来自javadoc:
此实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表.此链接列表定义迭代排序,即元素插入集合(插入顺序)的顺序.
您将要使用TreeSet作为有序集,请查看已排序集javadoc:https://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html