LinkedHashSet或ArrayList

时间:2010-08-21 15:38:40

标签: java data-structures

我希望

  1. 避免插入重复的项目。
  2. 当我遍历集合类时,返回的项与插入顺序相同。
  3. 我可以知道,我应该考虑选择ArrayList(在插入前显式执行包含检查)或LinkedHashSet吗?

    感谢。

4 个答案:

答案 0 :(得分:22)

绝对使用LinkedHashSet。它是为您所需要的。每次需要插入内容时搜索整个ArrayList将是性能杀手(每次都是O(n))

答案 1 :(得分:5)

如果您不想插入重复的项目,请使用LinkedHashSet

答案 2 :(得分:2)

LinkedHashSet似乎完全符合该法案。

当您构建自己的对象时,并计划在此处使用LinkedHashSet之类的集合中使用它们。不要忘记为要存储在其中的项目覆盖equalshashcode

答案 3 :(得分:2)

请检查一下: http://wiki3.cosc.canterbury.ac.nz/images/e/e9/JavaCollections.png

LinkedHashSet是您所需要的,因为它是 Set 界面的实现。 Set有一个非常酷的习惯:它默认不允许重复。所以,我们已经完成了你的1。

2怎么样? 我们知道,我们需要一个Set实现,但是哪个?

HashMap - 您可以存储K,V对,但没有订单。

TreeSet - 这是最慢的解决方案,因为它使用compareTo方法来保持每个项目的排序和排序。这就是为什么在构造TreeSet时可以将比较器传递给它的原因。

LinkedHashSet - 按照INSERTING的顺序返回元素。它是HashSet的有序版本。

请在这里找到一个很酷的描述: http://java67.blogspot.co.uk/2014/01/when-to-use-linkedhashset-vs-treeset-vs-hashset-java.html?_sm_au_=iVVMtMLHSDQ5P0P7