如果有人熟悉 Objective-C,那么有一个名为 NSOrderedSet
的集合,它充当 Set 并且它的项目可以作为 Array 的项目进行访问。
Java中有这样的东西吗?
我听说有一个名为 LinkedHashMap
的集合,但我还没有找到类似的集合。
原文由 Uko 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果有人熟悉 Objective-C,那么有一个名为 NSOrderedSet
的集合,它充当 Set 并且它的项目可以作为 Array 的项目进行访问。
Java中有这样的东西吗?
我听说有一个名为 LinkedHashMap
的集合,但我还没有找到类似的集合。
原文由 Uko 发布,翻译遵循 CC BY-SA 4.0 许可协议
每个 Set 都有一个 iterator()。普通 HashSet 的迭代器是相当随机的,TreeSet 按排序顺序执行, LinkedHashSet 迭代器按插入顺序迭代。
但是,您不能替换 LinkedHashSet 中的元素。您可以删除一个并添加另一个,但新元素不会取代原始元素。在 LinkedHashMap 中,您可以替换现有键的值,然后这些值仍将按原始顺序排列。
另外,您不能在某个位置插入。
也许您最好使用带有显式检查的 ArrayList 以避免插入重复项。
原文由 GeertPt 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
看一下 LinkedHashSet 类
来自 Java 文档:
Set 接口的哈希表和链表实现,具有可预测的 _迭代顺序_。此实现与 HashSet 的不同之处在于它维护一个贯穿其所有条目的双向链表。该链表定义了迭代顺序, 即元素插入集合的顺序 (insertion-order) 。 _请注意,如果将元素重新插入到 set 中,插入顺序不会受到影响_。 (如果 s.add(e) 被调用时元素 e 被重新插入到集合 s 中,而 s.contains(e) 将在调用之前立即返回 true。)。