列表由HashSet备份

时间:2016-03-31 18:19:19

标签: java list collections set

我需要按照添加顺序将对象存储在集合中,这就是我需要List的原因。但是,列表不应包含重复项。我还需要快速确定集合中是否已存在对象。不是每次都迭代列表,最好是像HashSet这样的东西。我可以快速找到并添加元素并保留插入顺序。

问题是 - 我应该:

  1. 通过添加HashSet字段扩展ArrayList?

  2. 实现一个Java集合接口(List或Set)?

  3. 只需创建一个包含两个字段的新类 - ArrayList和 HashSet的

  4. 第一个选项有缺点 - 我不需要所有的ArrayList方法,因此我必须覆盖所有这些方法,以便我班级的用户不会调用基类方法这会简单地搞砸(例如,可以从列表中删除一个对象但该对象仍然存在于该集合中)。并且没有办法删除基类方法(除了覆盖它并抛出异常)。

    同样对于2,我真的必须实现接口的所有方法。

    第三个选项看起来对我来说是最好的,但它使代码实现依赖,因为我的类没有实现任何接口。

    在这种情况下我该怎么办? 我希望add接口拥有所有List方法。 - LinkedHashSet不是一个选项

2 个答案:

答案 0 :(得分:2)

您可以使用LinkedHashSet,这是一个Set实现,可确保迭代顺序与您添加元素的顺序相同。

  

Set接口的哈希表和链表实现,具有可预测的迭代顺序。 ...此链接列表定义迭代排序,即元素插入集合(插入顺序)的顺序。

答案 1 :(得分:1)

无需自行实施任何内容。使用维持遭遇顺序的LinkedHashSet