【问题标题】:looking for a special java collection寻找一个特殊的java集合
【发布时间】:2020-08-19 07:04:04
【问题描述】:

是否有一个 java 集合只允许在 get (index i) 方法中使用唯一对象?

我首先想到的是一个 treeSet,但在 ...
中没有 get 方法 我想要什么:

// replace object with any class that implement the right things to make it work
Collection<Object> collection = dunno<Object>();
Object o = new Object()
Object o2 = new Object()

collection.add(o)
collection.add(o)

collection.size() // should get 1
collection.get(0) // should return o

// let's suppose that o2 is lower than o (if the collection doesn't sort the way i want i can change it anyway)

collection.add(o2)
collection.get(0) // should return o2

基本上就像一个treeSet,但是有一个get方法,有人知道类似的东西吗?

【问题讨论】:

  • 如果需要,您可以在添加到 List 之前始终使用 contains
  • 是的,使用包含和添加到列表的速度与添加到 treeSet 一样快,尤其是对于一些大型集合,这可能是一个好主意?我可以轻松地处理一千多个元素...
  • 这能回答你的问题吗? Any implementation of Ordered Set in Java?
  • @SomeDude 链接到的问题中的答案建议 LinkedHashSet

标签: java


【解决方案1】:

标准库中没有这样的集合,我也不知道在其他广泛使用的库(如 guava 或 apache commons)中有类似的东西。

因此答案是:您必须为此实现自己的集合。一个直接的解决方案是使用一个集合和一个列表来提供所需的接口,这会起作用,但显然会在一定程度上增加内存占用。

【讨论】:

    【解决方案2】:

    在您的自定义类中覆盖 equalshashcode 使用Arraylist,你可以在添加删除重复之前检查list.contains

    【讨论】:

      【解决方案3】:

      LinkedHashSet 保持插入顺序,同时还保持插入项的唯一性。

      虽然它没有专用的 get(i) 方法,但您可以通过迭代集合来实现一个。

      不过,您将为 get() 的性能付费。

      【讨论】:

        【解决方案4】:

        您应该使用LinkedHashSet。 这个集合只接受唯一的对象并跟踪顺序

        【讨论】:

        • 虽然它没有索引,但这是 Galyfray 想要的
        猜你喜欢
        • 2013-02-20
        • 1970-01-01
        • 2014-09-27
        • 2011-10-24
        • 2018-04-03
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        相关资源
        最近更新 更多