列表实现既是一个列表(序列)?

时间:2010-10-13 02:46:54

标签: java collections

我处于扩展LinkedList并实现Set的位置,因此我有一个没有重复的列表。我想知道这样的实现是否已经存在?

我打算做的就是覆盖add(e)方法以首先查找元素,如果存在则不添加它。类似的东西:

add(E){
   if(get(E) == null) super.add(E);
}

2 个答案:

答案 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,这可能与您要查找的内容一致。