[Java] 使用散列時,重寫HashCode和Equals

來源:互聯網
上載者:User
1. 源起    有的時候資料對象經常會放到HashMap或者HashSet裡面,希望根據ID來表示資料對象,這就需要覆蓋hashCode和equals方法。 2. 代碼    
public class Goods {    public Goods(int id) {        this.id = id;    }    public int id;    public String name;    public String image;    public double price;    public static void main(String[] args) {        Set<Goods> set = new HashSet<Goods>();        Goods a = new Goods(0);        Goods b = new Goods(0);        set.add(a);        set.add(b);        HashMap<Goods, Integer> map = new HashMap<Goods, Integer>();        map.put(a, 0);        map.put(b, 0);        System.out.println("Goods");        System.out.println("set num = " + set.size());        System.out.println("map key set num = " + map.keySet().size());        System.out.println("a.hashCode() = " + a.hashCode());        System.out.println("b.hashCode() = " + b.hashCode());    }};
   Goods   set num = 2   map key set num = 2   沒有重載的時候,即使ID相同,也被當作兩個對象。
public class GoodsWithHashAndEquals {    public GoodsWithHashAndEquals(int id) {        this.id = id;    }    public int id;    public String name;    public String image;    public double price;    @Override    public int hashCode() {        return id;    }    @Override    public boolean equals(Object obj) {        return obj.hashCode() == hashCode();    }    public static void main(String[] args) {        Set<GoodsWithHashAndEquals> set = new HashSet<GoodsWithHashAndEquals>();        GoodsWithHashAndEquals a = new GoodsWithHashAndEquals(0);        GoodsWithHashAndEquals b = new GoodsWithHashAndEquals(0);        set.add(a);        set.add(b);        HashMap<GoodsWithHashAndEquals, Integer> map = new HashMap<GoodsWithHashAndEquals, Integer>();        map.put(a, 0);        map.put(b, 0);        System.out.println("GoodsWithHashAndEquals");        System.out.println("set num = " + set.size());        System.out.println("map key set num = " + map.keySet().size());        System.out.println("a.hashCode() = " + a.hashCode());        System.out.println("b.hashCode() = " + b.hashCode());    }}
    GoodsWithHashAndEquals    set num = 1    map key set num = 1    重載後,ID相同,就是被當做一個對象了。 3. 參考        Map的HashCode做緩衝key值引發的重大bug    JAVA中的equals()和hashCode()方法 4. 本文連結    http://blog.csdn.net/xiaodongrush/article/details/9419831
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.