回答
沒有,沒有方法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