当前位置: 首页 > 面试题库 >

Java HashSet中元素的顺序

唐向荣
2023-03-14
问题内容

为什么第二和第三组保留顺序:

Integer[] j = new Integer[]{3,4,5,6,7,8,9};
LinkedHashSet<Integer> i = new LinkedHashSet<Integer>();
Collections.addAll(i,j);
System.out.println(i);

HashSet<Integer> hi = new HashSet<Integer>(i);
System.out.println(hi);

LinkedHashSet<Integer> o = new LinkedHashSet<Integer>(hi);
System.out.println(o);

这是我得到的输出:

3,4,5,6,7,8,9
3,4,5,6,7,8,9
3,4,5,6,7,8,9

问题答案:

第二个(仅使用HashSet)只是一个巧合。从JavaDocs:

此类实现Set接口,该接口由哈希表(实际上是HashMap实例)支持。它不保证集合的迭代顺序。
特别是,它不能保证顺序会随着时间的推移保持恒定
。此类允许使用null元素

第三个(LinkedHashSet)设计为:

Set接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashSet的不同之处在于,它维护一个贯穿其所有条目的双向链接列表。此链表定义了迭代顺序,即将元素插入到集合中的顺序(插入顺序)。请注意,如果将元素重新插入到集合中,则插入顺序不会受到影响。(如果在调用s.contains(e)即将返回true时调用s.add(e),则将元素e重新插入到set
s中。)



 类似资料:
  • 问题内容: 我不了解Python从保持集中应用的顺序。例如: 的顺序是。为什么“ A”在“ C”之前(可能是字母顺序)?为了保留添加顺序,我必须做什么? 问题答案: 您不能有订单集。而且没有办法告诉Python如何订购它。检查此答案以找到替代方法。

  • 问题内容: 这是我的Django代码,无法正常运行: 有没有办法保持原始元素的顺序,所以帖子将按in排序? 谢谢! 编辑: Python 2.6,Django 1.3 问题答案: 使用SortedDict代替dict() SortedDict保持其属性中的顺序。因此,您可以根据需要操纵顺序而无需重建字典。例如,要反转SortedDict的顺序,只需使用

  • 现在,如果我使用以下代码进行比较,我将在XMLUnit的帮助下相互比较两个xml文件 现在它给出了:预期的属性值'02',但是'01',但我不希望有差异,我希望表id是唯一的,如果在另一个文件中看到相同的表id,则只检查本例中的Main-Element:table->包含什么。

  • 我正在用JAXB在列表中解组元素序列,见下文。 XML文件 Java-代码 但是,我有点担心textPoint元素的固有顺序,因为它们在XML文件中的顺序很好,但是没有元素(例如ID),我可以通过对它们进行排序。尽管如此,它似乎可以按照与XML文件相同的顺序对它们进行解组,因此不必担心这一点吗?

  • 问题内容: 如果我有三个向右浮动的元素,那么为什么顺序跟随(请参阅jsfiddle),而元素3实际上是最后一个元素,则元素1是右侧的第一个元素。 现在订购 但是元素在html中按此顺序 为什么? 问题答案: 这种“倒序”是预期的结果。 您可以根据需要在CSS规范中进行深入研究,但是示例将按原样进行渲染。 如果您希望它们以与标记相同的顺序显示,请向右浮动,其子项向左浮动。

  • 问题内容: 我有一个哈希表。values()方法以与插入顺序不同的顺序返回值。如何获得与插入顺序相同的值?使用LinkedHashmap是一种替代方法,但不同步。 问题答案: 使用。 接口的哈希表和链表的实现,具有可预测的迭代顺序。此实现的不同之处在于,它维护一个遍历其所有条目的双向链接列表。此链表定义了迭代顺序,通常是将键插入映射中 的顺序 ( insert-order )。请注意,如果将密钥