經過查看java底層api實現能夠發如今hashset中比較2個值是否相等,他是比較的hash值和equals方法,因此咱們只須要重寫這2個方法便可。java
實例程序:api
package com; import java.util.HashSet; import java.util.Set; public class SetDemo { public static void main(String[] args) { User user0 = new User(1, "admin"); User user3 = new User(2, "user"); User user1 = new User(2, "user"); User user2 = new User(3, "admin"); String s1 = "hello"; String s2 = "hello"; // boolean equals = user.equals(admin); System.out.println(s1==s2); // System.out.println(equals); Set<User> userSet = new HashSet<User>(); userSet.add(user3); userSet.add(user2); userSet.add(user0); userSet.add(user1); // 輸入結果 admin1 admin3 user2 for(User u : userSet){ System.out.print(u.username + u.id + "\t"); } } } class User{ protected Integer id; protected String username; public User(Integer id, String username){ this.id = id; this.username = username; } /** * 若是對象類型是User 的話 則返回true 去比較hashCode值 */ @Override public boolean equals(Object obj) { if(obj == null) return false; if(this == obj) return true; if(obj instanceof User){ User user =(User)obj; // if(user.id = this.id) return true; // 只比較id // 比較id和username 一致時才返回true 以後再去比較 hashCode if(user.id == this.id && user.username.equals(this.username)) return true; } return false; } /** * 重寫hashcode 方法,返回的hashCode 不同才認定爲不一樣的對象 */ @Override public int hashCode() { // return id.hashCode(); // 只比較id,id同樣就不添加進集合 return id.hashCode() * username.hashCode(); } }
若有問題,請微信掃碼回覆微信