Jam*_*mes 4 java collections list set
我有一个数据结构,我目前正在使用它ArrayList.我意识到在这个结构中我不希望出现任何重复.我的第一个想法是使用某种形式的集合,但顺序也很重要.经过一些谷歌搜索和搜索收藏文档,我发现LinkedHashSet几乎完成了这项工作.不幸的是,保留顺序的一个主要原因是因为我使用get(int index)ArrayList 的方法进行随机访问,我无法看到任何解决方法.
更简洁 - 我需要一个保留顺序并允许随机访问的集合.到目前为止,我所看到的所有类都没有提供此功能.有没有人知道提供这个的课程,还是我必须自己做?如果是后一种情况,在创建人们都知道的这种结构时会有任何陷阱吗?
(或者,从ArrayList或类似结构中检查和删除重复项的快速简便方法就足够了)
编辑:为了清楚起见,将元素添加到列表中的顺序是重要的,而不是它们彼此比较的顺序
Boz*_*zho 10
SetUniqueList 来自commons-collections:
List<Foo> uniqueList = SetUniqueList.decorate(new ArrayList<Foo>());
Run Code Online (Sandbox Code Playgroud)
(不幸的是,commons-collections仍然不支持泛型,所以你必须在这里压制警告)
我只想延长ArrayList。
public class SetList<E> extends ArrayList<E> {
@Override
public boolean add(E e) {
return contains(e) ? false : super.add(e);
}
@Override
public void add(int index, E e) {
if (!contains(e)) {
super.add(index, e);
}
}
@Override
public boolean addAll(Collection<? extends E> c) {
return addAll(size(), c);
}
@Override
public boolean addAll(int index, Collection<? extends E> c) {
Collection<E> copy = new ArrayList<E>(c);
copy.removeAll(this);
return super.addAll(index, copy);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,该add()方法符合合同:
确保此集合包含指定的元素(可选操作)。
true如果此集合因调用而发生更改,则返回。(false如果此集合不允许重复且已包含指定元素,则返回。)