【发布时间】:2016-03-31 18:19:19
【问题描述】:
我需要按照添加的顺序将对象存储在集合中,这就是我需要List 的原因。但是,该列表不应包含重复项。我还需要快速确定集合中是否已存在对象。与其每次都迭代列表,不如使用HashSet 之类的东西。我可以快速查找和添加元素并保留插入顺序。
问题是 - 我应该:
通过添加 HashSet 字段来扩展 ArrayList?
实现 Java 集合接口(List 或 Set)之一?
只需创建一个包含两个字段的新类 - ArrayList 和 哈希集?
第一个选项有一个缺点——我不需要所有的 ArrayList 方法,所以我必须重写所有这些方法,这样我的类的用户就不会调用只会搞砸的基类方法(例如,可以从列表中删除一个对象,但该对象仍然存在于集合中)。并且没有办法删除基类方法(除非覆盖它并抛出异常)。
对于 2,我确实必须实现接口的所有方法。
第 3 个选项对我来说是最好的,但它使代码实现依赖,因为我的类没有实现任何接口。
在这种情况下我该怎么办? 我希望拥有List 接口具有的所有add 方法。 - LinkedHashSet 不是一个选项。
【问题讨论】:
-
为什么不为您的列表调用
contains(Object o),如果该对象已经在您的列表中,请不要再添加它 -
因为列表的 O(n) 和集合的 O(1)。而且我的收藏很大。
-
考虑到您的限制,是的,绝对是选项 3。尽管您的需求列表仍然没有任何明显的理由,但您需要所有各种
add方法。 -
@LouisWasserman 好的,但我知道我需要它们。谢谢。
标签: java list collections set