[英]Remove Duplicates from List of HashMap Entries
我有一個List<HashMap<String,Object>>
代表一個數據庫,其中每個列表記錄都是一個數據庫行。
我的數據庫中有 10 列。 有幾行的 2 個特定列的值相等。 在使用數據庫中的所有行更新列表后,我需要從列表中刪除重復項。
什么是有效的方法?
僅供參考 - 我在查詢數據庫時無法執行不同的操作,因為在加載數據庫后,稍后將 GroupName 添加到Map
。 由於 Id 列不是主鍵,因此一旦將 GroupName 添加到Map
。 您將有基於 Id + GroupName 組合的重復項!
希望我的問題有意義。 如果我們需要更多說明,請告訴我。
Collections.sort(yourlist, yourcomparator)
;遍歷列表的成本是 O(n)。 排序是 O(n log n)。 所以這個算法是 O(n log n)。
我們還可以通過使用帶有該比較器的 TreeSet 進行動態排序。 插入是 O(log n)。 我們必須這樣做n次。 所以我們得到 O(n log n)。
我遇到了同樣的情況,經過大量搜索,最終以下解決方案對我有用。
Objects.hash(filed1, field2, ...)
;下面是代碼——
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if( this == obj) {
return true;
}
if( null == obj || getClass() != obj.getClass()) {
return false;
}
Pojo rest = (Pojo) obj;
return field1.equals(rest.field1) && field2.equals(rest.field2) && field3.equals(rest.field3);
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
Set<Pojo> pathSet = new HashSet<>();
//Iterate over list and construct pojo object here
Pojo pojo = new Pojo(value1, value2, value3)
pathSet.add(pojo)
謝謝,
我已經學習了一個 Employee 類並使用 Integer,Employee 對象創建了 Map 作為鍵值對,這里是我的 Map
Map<Integer,Employee> map = new HashMap<Integer,Employee>();
Employee 類是一個 bean 類,它具有 name、id、designation 等屬性; map 允許唯一鍵。 但是如果你不想在你的地圖中允許重復的值,你必須在 bean 類中覆蓋 equals 方法。
@Override
public boolean equals(Object object){
if (object == null) return false;
if (object == this) return true;
if (this.getClass() != object.getClass())return false;
Employee employee = (Employee)object;
if(this.hashCode()== employee.hashCode())return true;
return false;
}
在向 Map 添加鍵值時,您必須使用 contains 方法
if(!map.containsValue(map.get(id))){
map.put(id,employee);
}
containsValue
內部調用equals()
方法,因此您可以使用 equals 方法,它將檢查每個值(對象)與以前的對象,如果哈希碼相同,則返回 true 表示兩者都是相同的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.