我处于扩展LinkedList并实现Set的位置,因此我有一个没有重复的列表。我想知道这样的实现是否已经存在?
我打算做的就是覆盖add(e)
方法以首先查找元素,如果存在则不添加它。类似的东西:
add(E){
if(get(E) == null) super.add(E);
}
答案 0 :(得分:6)
也许LinkedHashSet可以满足您的需求。它将元素保留在(默认情况下)插入顺序。
不可能同时实现这两个接口(至少如果你想遵循List和Set的规范),因为hashCode定义冲突。
返回此列表的哈希码值。列表的哈希码被定义为以下计算的结果:
hashCode = 1;
Iterator i = list.iterator();
while (i.hasNext()) {
Object obj = i.next();
hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
}
与
返回此set的哈希码值。集合的哈希码被定义为集合中元素的哈希码的总和,其中空元素的哈希码被定义为零。这确保了s1.equals(s2)意味着对于任何两个集合s1和s2的s1.hashCode()== s2.hashCode(),这是Object.hashCode方法的常规协定所要求的。
答案 1 :(得分:5)
标准集合中不存在Java实现。
但是,您可以查看SetUniqueList中的Common Collections,这可能与您要查找的内容一致。