gpt4 book ai didi

Java 集合接口(interface),保证不重复并保留插入顺序

转载 作者:行者123 更新时间:2023-12-01 11:29:03 25 4
gpt4 key购买 nike

有没有一个java集合接口(interface),既能保证不重复,又能同时保留插入顺序?

这正是 LinkedHashSet 正在做的事情?但是,我想知道是否还有一个接口(interface)保证同样的事情以避免直接依赖于某些特定的类?

SortedSet 仅指自然顺序(并且不是由 LinkedHashSet 实现的)。

本质上,我正在寻找一个接口(interface),它表明元素的迭代顺序很重要(同时它不包含重复项,即 List 显然不适用)。

谢谢!

更新这个问题并不要求实现或数据结构(就像在被标记为重复的问题中一样)。正如一些人指出的澄清那样,我正在寻找一个接口(interface),它在其合约中需要这两个属性(没有重复和重要的顺序)。这样做的应用是,我可以将这种类型的对象返回给客户端,而无需 promise 任何特定的实现。

更新2此外,the related question与此问题相比,特别要求保留重复项。所以我很确定它不是重复的。

最佳答案

JDK 集合中没有接口(interface)提供此功能。

您可以尝试通过组合 SetList 来构建它。任何实现 Set 的集合都不应允许重复元素,并且任何实现 List 的集合都应保持顺序。

但是,JDK 集合中没有类同时实现 SetList。因为不幸的是 LinkedHashSet 没有实现 List

当然,您可以通过包装 LinkedHashSet(通过组合模式,而不是通过派生)并添加 get(int i) 方法来轻松构建一个实现,或者通过包装ArrayList(再次通过组合)并在尝试添加新元素时抛出IllegalArgumentException

恕我直言,最棘手的部分是 addAll 方法,因为两个接口(interface)都用不同的语义定义它(强调我的):

  • 集合:将指定集合中的所有元素添加到此集合中如果它们尚不存在
  • List :将指定集合中的所有元素附加到此列表的末尾,按照指定集合的​​迭代器返回的顺序

由于源集合包含重复项,您无法满足这两个要求,因此我的建议是 addAll 在这种情况下抛出 IllegalArgumentException ,或者更简单地说,它总是抛出UnsupportedOperationException 因为 addAll 是两个接口(interface)的可选操作

关于Java 集合接口(interface),保证不重复并保留插入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com