问题描述
我的用例就像我需要维护一组唯一的项目。我可能需要经常从索引处添加或删除集合中的项目(我目前是该项目的成员,但是我可以修改),同时我需要更新项目的索引。
我无法确定哪个Java集合最适合我的需求。 HashSet和SortedSet都保证唯一性,但是不确定如何处理索引部分。
解决方法
根据问题和评论,您对馆藏有以下基本要求:
- 集合中的元素必须唯一。
- 集合必须按用户指定的顺序维护元素。
- 集合元素必须具有表示该元素当前位置的唯一索引。
- 索引必须随着元素的插入和删除而调整。
没有(单一)Java SE集合类型执行1和2、3或4。
List
是唯一支持并可以维持任意顺序的Java SE集合类型,因此您需要从此开始。例如这样的东西:
public class MyList<E> extends ArrayList<E> {
...
@Override
public void add(int pos,<E> e) {
if (this.contains(e)) {
throw new SomeException("already in collection");
}
this.add(pos,e);
}
}
请注意,HashMap<Integer,E>
是一种可能的替代方法,但是很复杂,在添加和删除元素时调整索引是很复杂的。 (比较性能特征并不简单,但有可能在您的用例中无关紧要。)