为什么java.util.Set不包含值getter?有替代品吗?

Mar*_*cin 7 java collections

由于设置条目仅由属性(hashCode()+ equals())的子集区分,因此有时需要对集合中包含的原始对象进行操作,这是不可能的java.util.Set.我想出的唯一选择是:Map<T, T>- 不是一个非常简洁的解决方案.

收集框架中还有其他替代方案吗?要求是:O(1)获取时间,基于hashCode() + equals()结果没有重复.

epo*_*och 0

不是java.util.Collections本身,而是使用Google Guava,您可以从给定的Iteratorusing中检索任何元素Iterables.get

通常我不会提倡外部库,但鉴于 Guava 非常强大和有用,我认为它没有问题。

或者,您可以使用自己的实现来迭代该集合。


此外,我在这里发现了一个非常有趣的线程来解释这种行为。

  • 但它不再是 O(1) 了。 (3认同)