2013-04-12 27 views
0

我有一個自定義對象的數組列表,該對象必須是一個數組列表,但我有一些重複的名單,我想大跳檢查之前,我做了添加到列表中。這怎麼能實現。 victimSocialSecurityNumber是唯一的。在是我的代碼:如何防止重複在對象的ArrayList

CODE

while (rs.next()){ 

     Citizens victims = new Citizens(); 
     victims.setSocialSecurityNumber(rs.getInt("victimSocialSecurityNumber")); 

     victims.setfName(rs.getString("victimFName")); 

     victims.setlName(rs.getString("victimLName")); 

     victims.setPhoto(rs.getString("victimPhoto")); 

     victims.setName(rs.getString("victimFName") +" "+ rs.getString("victimLName")); 


     crime.getVictims().add(victims);   

回答

1

假設公民超越平等,你可以這樣做

if (!crime.getVictims().contains(victims)) { 
     crime.getVictims().add(victims); 
} 

雖然一般情況下,當重複是不允許的e系統解決方案是設置

如果您有疑問如何重寫equals /的hashCode讀http://javarevisited.blogspot.com/2011/10/override-hashcode-in-java-example.html

+0

我正在嘗試這個,但我沒有成功。你如何覆蓋平等? – devdar

+1

閱讀http://javarevisited.blogspot.com/2011/10/override-hashcode-in-java-example.html –

+0

非常感謝這工作,但我仍然有點困惑它是如何做到的。我對這些方法做了一些閱讀,瞭解它們是如何使用的,以及爲什麼要重寫它們,希望它很快會出現。另外爲什麼不等於這樣的默認方法工作? – devdar

3

你可以轉換ArrayList的設置和背部擺脫重複的或直接使用結構,即只允許排序的獨特元素:LinkedHashSet

+0

會,這也設置對象的屬性列表,以及即crime.victims列表? – devdar

+1

@馬丁,也應該重寫'equals'和Citizens'的''hashcode'方法。 – hiway

0

我可能是完全錯誤的位置,但不會一個for循環解決問題了嗎?你可以只比較你是怎麼樣添加到ArrayList中的所有元素,如果沒有匹配添加它,如果有不?

+0

Asuming要從具有相同狀態創造更多然後一個公民停止用戶? –

+1

你的方法也很好。但是,選擇正確的數據結構非常重要。這有助於我們更好地瞭解他們的使用。 –

1

您可以使用哈希集合添加的對象並將其轉換爲一個ArrayList。這可以幫助您檢查受害者是否是唯一的。

CODE

集的HashSet =新的HashSet();

而(rs.next()){

Citizens victims = new Citizens(); 
    victims.setSocialSecurityNumber(rs.getInt("victimSocialSecurityNumber")); 

    victims.setfName(rs.getString("victimFName")); 

    victims.setlName(rs.getString("victimLName")); 

    victims.setPhoto(rs.getString("victimPhoto")); 

    victims.setName(rs.getString("victimFName") +" "+ rs.getString("victimLName")); 

    hashset.add(victims);  

}

列表列表=新的ArrayList(的HashSet);