2013-03-18 30 views
1

我有一個自定義類,看起來像下面:/自定義類用於在列表的HashSet

public class customClass(){ 
    private int keyCode; 
    private boolean up; 
    private String toTrigger; 

    public String getTrigger(); 
    public boolean up(); 
    public int keyCode(); 
} 

請告訴我對於性能有唯一值的列表的最佳方式?

我在想一個HashSet,但我如何確保它的唯一唯一實例我的customClass?

我需要重寫什麼?等於和HashCode?將確保我的哈希Set的CustomClass只有唯一的實例?

感謝

+0

這可以幫助你:http://stackoverflow.com/a/27609/1068167 – span 2013-03-18 13:45:49

+0

基本上是這樣:覆蓋'equals'和'hashCode'就足夠了,但一定要正確地覆蓋他們,這是不容易。 (請參閱上面* span *的鏈接) – Sentry 2013-03-18 13:46:55

+0

Ahh thanks :)所以在一個哈希集中,哈希集使用什麼來確定它是否相等?哈希碼或等於? – LmC 2013-03-18 13:47:39

回答

2

如果a.equals(b)是真的,那麼有hashCode()方法必須相同。

  • 覆蓋自定義類中的.equals()和.hashCode()。

    使用您的自定義類的相同字段來計算您用於在.equals()中檢查相等性的hashCode。

  • 是的,它會確保散列集中只有您的 customClass的唯一實例。所以去做吧。

+1

**否**。如果兩個對象是相等的,'hashCode()**必須**是相同的。 – SLaks 2013-03-18 13:52:45

+0

@SLaks感謝您糾正我。 – VishalDevgire 2013-03-18 13:57:50