java - 使用相同用户名创建的 2 个用户在执行 "map.get(user);"时可以有相同的结果吗?

标签 java

好的,看看这个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);

我的问题是 tomListnull 还是不是 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/

相关文章:

java - 创建用于创建文件的构造函数

java - 检查 HashMap 中是否存在字符串的一部分

java - Apache POI "smart drag copy"单元格

java - 在 excel Apache poi java 中为合并单元格添加边框。?

Java 反序列化类在 java.lang.ClassNotFoundException 上失败,包名来自服务器

java - Spring MVC 处理表单填充和提交

java - 在使用对象计算整数时,加号运算符如何工作?

java - 为什么人们说 MappedByteBuffer 的 mmap 更快?

java - 将任意参数的数组传递给通过反射调用的方法

java - Mockito spy 功能