我希望
我可以知道,我应该考虑选择ArrayList(在插入前显式执行包含检查)或LinkedHashSet吗?
感谢。
答案 0 :(得分:22)
绝对使用LinkedHashSet。它是为您所需要的。每次需要插入内容时搜索整个ArrayList将是性能杀手(每次都是O(n))
答案 1 :(得分:5)
如果您不想插入重复的项目,请使用LinkedHashSet
。
答案 2 :(得分:2)
LinkedHashSet
似乎完全符合该法案。
当您构建自己的对象时,并计划在此处使用LinkedHashSet
之类的集合中使用它们。不要忘记为要存储在其中的项目覆盖equals
和hashcode
。
答案 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