回答
没有,没有方法java.lang.List
删除重复项。看来,设计师预计List
不会在你担心重复的场景中:
set不同,列表通常允许重复的元素。更正式地说,列表通常允许E1元素对和e2,使得e1.equals(E2),它们通常允许多个null元素,如果他们允许的null元素。这是不难想象,有人可能希望实现禁止复制,当用户试图插入抛出运行时异常的列表,但我们希望这种用法是罕见的。
你要么需要使用Set
或实现删除重复自己的方法。
简短的回答:没有,没有。 List
接口支持标准列表结构模型和标准列表不关心重复项。因此:List
没有一个抽象的removeDuplicate()
什么的。
你可以实现自己的列表中,不允许添加重复。后台列表是一个ArrayList:
public class SetList<T> implements List<T> {
private List<T> internal = new ArrayList<T>();
// some constructors
// all adding methods and contructors do a check first
// example:
public SetList<T>(Collection<T> others) {
for (T other:others)
add(other); // adds all items except duplicates
}
@Override
public void add(T item) {
if (!internal.contains(item))
return internal.add(item);
else
return false;
}
// other methods simply delegate to the internal list
// examples:
@Override
public void clear() {internal.clear();}
@Override
public Iteratory<T> iterator() {return internal.iterator();}
}
加法 - 你甚至可以添加Set
接口,比你有,保持插入顺序一组实施。
注 - 用相同的技术,你可以实现一个自定义的List
- 又一个真实ArrayList
支持,即提供了一个额外的方法来删除重复(从后台列表)
是否有任何预定义的方法来删除列表中的重复项 – kishore 2011-02-24 06:39:32
如果元素的顺序是非常重要的,你可能要考虑实例化一个LinkedHashSet,通过你的清单给它的构造。然后,您可以调用此LinkedHashSet的迭代器将按原始顺序为您提供所有列表项,但删除了重复项。
没有内置方法可以从List
中删除重复项。
的选项有:
使用一组,而不是一个列表......只要你不关心你的原始列表中的元素的顺序。
使用不允许按照@Andreas_D所述插入重复项的列表方法。
重建列表按下面的代码:
List list = new ArrayList(); for (Object obj: inputList) { if (!list.contains(obj)) { list.add(obj); } }
这是
O(N^2)
因为list.contains(obj)
是O(N)
。重建列表按下面的代码:
List list = new ArrayList(); HashSet seen = new HashSet(); for (Object obj: inputList) { if (!seen.add(obj)) { list.add(obj); } }
这是
O(N)
,如果你做出关于散列函数的行为的某些假设。
还有其他的变化。
警告,基于Collection
类的所有解决方案都需要某些方法是由你的元素类正确/实现一致。但是,对于任何遵循Java 最佳实践的类,这都是给定的。
- 1. 最简单的方法来查找和删除重复?
- 2. 删除重复方法不会删除重复项
- 3. 重构以下方法来删除重复的代码
- 4. 删除重复的CollectionUtils.collate方法
- 5. 删除重复的使用方法
- 6. 最有效的方法来合并数组删除重复
- 7. 最有效的方法来删除重复
- 8. 有没有简单的方法来重复数据删除Hive表?
- 9. excel删除重复总和方法
- 10. 从验证方法中删除重复
- 11. wit.ai - 无法删除重复的回复
- 12. 删除重复的命名范围
- 13. 删除重复的文件名
- 14. 方法名删除线
- 15. 删除重复
- 16. 删除重复
- 17. 删除“重复”
- 18. 删除重复
- 19. 重复删除
- 20. 删除重复
- 21. 删除重复
- 22. 删除重复
- 23. 删除重复
- 24. 删除重复
- 25. ClassFormatError:来自EnhancerBySpringCGLIB的重复方法名称和签名
- 26. 删除地址中的重复单词
- 27. 列表清单中的重复删除
- 28. 删除重复单元格的行
- 29. 删除重复的单词mysql concat_ws
- 30. 删除流中的重复项(方案)
也许你应该首先使用Set而不是List。 – tanyehzheng 2011-02-24 06:23:11
这不是回答这里: http://stackoverflow.com/questions/2849450/remove-duplicates-from-a-list – Friedrich 2011-02-24 06:22:52
我真的很喜欢讽刺的是,有关删除重复的问题已被删除...因为这是一个重复的问题。 – gutch 2011-02-24 09:48:49