2017-10-09 98 views
1

我有一個對象列表,我需要檢查對象的特定字段是否唯一。檢查列表中的特定對象屬性是否唯一

public class SomeBean { 

    private String name; 
    private String value; 

} 

List<SomeBean> beans = ... 

所以我需要檢查所有value領域和所有name領域是獨一無二的獨立(所有值是獨一無二的,所有的名字都是唯一的)。 明顯的解決辦法是得到List<String> names ...List<String> values的列表,並單獨檢查唯一性,但在我的情況下,這個列表可能相當大。由於這個列表來自外部,我無法改變最初的數據結構。

那麼什麼是最有效率的這樣做呢?

謝謝。

+2

字段是獨立唯一的還是組合是唯一的? – Yash

+0

獨立。更新了問題 –

+0

在我看來,你將不得不使用HashTable(s)來檢查。如果你不這樣做,你最終會得到O(n^2) – Yash

回答

1

一種可能的方式是使用TreeSet集合。您應該覆蓋compareTo()方法以防止重複項目

0

刪除重複項目最容易的解決方案是將您的項目加載到Set,因爲Set不允許重複的值。您可以使用HashSet

OR

您可以添加您的物品HashMap<String, SomeBean> wher你可以使用getName() + getValue()作爲重點:

HashMap<String, SomeBean> myMap= new HashMap<>(); 
myMap.put(someBean.getName() + someBean.getValue(), bean); 
... 
+0

我不同意你需要重寫bean的equals()和hashCode()。它比這更簡單。 –

+0

我不會重寫DTO的'equals'和'hashCode'只能完成這個任務。但我想我可以用自定義比較器創建TreeSet。 –

相關問題