通过扩展ArrayList或使用其他容器来确保ArrayList列表的所有项目唯一的推荐方法是什么?
class ProList extends ArrayList
{
public <E> boolean super_add(E e)
{
if(this.contains(e)) {
System.out.println("Item not added because it exists already.");
return false;
}
else
return this.add(e);
}
};
以上的作品,但它充满警告,看到有点hacky ......
答案 0 :(得分:4)
如果你想维护插入顺序和唯一性(由hashCode()和equals()定义,你需要在任何进入colelction的类中正确覆盖和实现),使用LinkedHashSet
答案 1 :(得分:2)
如果你没有 使用ArrayList
,我建议你查看Java的Set接口。常规HashSet可能会为您提供最佳表现。如果您希望元素保持逻辑顺序,TreeSet将起作用。如果您想维护广告订单顺序,LinkedHashSet会有效,就好像它是ArrayList
一样。您必须覆盖equals()
才能使用任何集合,并且要使用基于哈希的集合,您还需要覆盖hashCode()
。