我需要在某些数据结构中存储唯一对象,但我还需要像ArrayList或plain数组一样通过索引进行访问。也许有一些优雅的方法来做到这一点,不使用从set到数组的转换,迭代遍历所有elemnts,在添加到ArrayList和其他时检查值。 我将不胜感激任何帮助和建议。
答案 0 :(得分:1)
您应该查看ListOrderedSet
中的Apache Commons Collections:
装饰另一个Set以确保迭代器保留并使用添加顺序。
如果对象第二次添加到集合中,它将保留在迭代中的原始位置。可以通过迭代器或toArray方法从集合中观察订单。
ListOrderedSet还有各种有用的直接方法。这些包括List中的许多,例如get(int),remove(int)和indexOf(int)。可以通过asList()获得该集的不可修改的List视图。
答案 1 :(得分:0)
制作包含HashSet<T>
和ArrayList<T>
的班级。对于add
/ append
操作,如果该元素尚未包含在集合中,则将其附加到列表并将其添加到HashSet。您将使用大约两倍于普通ArrayList的内存,但您将获得O(1)
随机访问并包含操作。