好的,看看这个User
类
public class User{
private String userName;
public User(String userName){
this.userName=userName;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!(obj instanceof User))
return false;
User user = (User) obj;
return user.userName.equals(this.userName);
}
@Override
public int hashCode() {
return userName.hashCode() ;
}
}
现在我们有了一个 map
Map<User, List<String>> map=new ConcurrentHashMap<User, List<String>>();
现在我们得到了这些代码:
User tom=new User("Tom");
List<String> tomList=new ArrayList<String>();
tomList.add("Test");
User mary=new User("Mary");
map.put(tom,tomList);
map.put(mary,new ArrayList<String>());
现在,我们创建一个新对象 Tom
User tom2=new User("Tom");
List<String> tomList=map.get(tom2);
我的问题是 tomList
是 null
还是不是 null
如果它是 null,那么我们可以使其不null
。这意味着我们不必尝试找到确切的对象,而是可以创建具有相同 userName
的对象,并且我们可以执行 map.get(user);
最佳答案
Map
键使用 key.equals(k)
进行匹配。
或者正式地:
如果 Map
已包含从键“k”到值“v”的映射,且 key.equals(k),则 get(key)
方法返回 v,否则返回 null。
就您而言:
User.equals() 匹配 userName 字符串属性,因此 map.get(tom2) 不 null。
所有名为“Tom”的用户对象将被视为具有相同的 key 。
关于java - 使用相同用户名创建的 2 个用户在执行 "map.get(user);"时可以有相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835549/