java中map插入相同的key

简介:

测试用例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package  test;
 
import  org.junit.Test;
import  po.Person;
 
import  java.util.HashMap;
import  java.util.IdentityHashMap;
import  java.util.Map;
 
/**
  * Created by Administrator on 2015/9/16.
  */
public  class  TestMap {
     /**
      * map插入相同key问题,value会不会覆盖
      */
     @Test
     public  void  testMap(){
         //HashMap中key的内容相同,则覆盖
         Map<String,Object> map1 =  new  HashMap<>();
         map1.put( "张三" , 1 );
         map1.put( "张三" , 2 );
         map1.put( new  String( "张三" ), 3 );   //根据String特性,这三条内容相同,前两条地址相同
         map1.put( "李四" 4 );
         for  (String s : map1.keySet()) {
             System.out.println(s+ "======" +map1.get(s));
         }
         /** 结果
          *   张三======3
              李四======4
          */
 
         System.out.println( "=====================================" );
         //IdentityHashMap中key的内存地址必须完全相同才会覆盖
         Map<String,Object> map2 =  new  IdentityHashMap<>();
         map2.put( "张三" , 1 );
         map2.put( "张三" , 2 );
         map2.put( new  String( "张三" ), 3 ); //
         map2.put( "李四" 4 );
         for  (String s : map2.keySet()) {
             System.out.println(s+ "====" +map2.get(s));
         }
         /**
          * 李四====4
          张三====2
          张三====3
          */
 
         System.out.println( "=====================================" );
 
         Map<Person,Object> map3 =  new  IdentityHashMap<>();
         map3.put( new  Person( "张三" 11 ),  1 );
         map3.put( new  Person( "张三" 11 ),  3 );
         map3.put( new  Person( "李四" 11 ),  4 );
         for  (Person s : map3.keySet()) {
             System.out.println(s.toString()+ "====" +map3.get(s));
         }
         /**
          * po.Person@165474cf====1
          po.Person@3ff2caf4====4
          po.Person@2c0cd7d====3
          */
         System.out.println( "=====================================" );
         Person person =  new  Person( "张三" 11 );
         Person person2 =  new  Person( "张三" 11 );
         System.out.println(person.equals(person2));
 
     }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package  po;
 
/**
  * Created by Administrator on 2015/9/16.
  */
public  class  Person {
     int  id;
     String name;
     int  age;
 
     @Override
     public  String toString() {
         return  "Person{"  +
                 "id="  + id +
                 ", name='"  + name + '\ ''  +
                 ", age="  + age +
                 '}' ;
     }
 
     @Override
     public  boolean  equals(Object o) {
         if  ( this  == o)  return  true ;
         if  (o ==  null  || getClass() != o.getClass())  return  false ;
 
         Person person = (Person) o;
 
         if  (id != person.id)  return  false ;
         if  (age != person.age)  return  false ;
         return  !(name !=  null  ? !name.equals(person.name) : person.name !=  null );
 
     }
 
     @Override
     public  int  hashCode() {
         int  result = id;
         result =  31  * result + (name !=  null  ? name.hashCode() :  0 );
         result =  31  * result + age;
         return  result;
     }
 
     public  Person(String name, int  age){
 
         this .name=name;
         this .age=age;
     }
}

  本文转自Ryan.Miao博客园博客,原文链接:http://www.cnblogs.com/woshimrf/p/4813664.html,如需转载请自行联系原作者

相关文章
|
3月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
96 2
|
3月前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
105 2
|
2月前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
54 1
|
3月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
107 4
|
3月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
141 3
|
3月前
|
存储 Java API
详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
【10月更文挑战第19天】深入剖析Java Map:不仅是高效存储键值对的数据结构,更是展现设计艺术的典范。本文从基本概念、设计艺术和使用技巧三个方面,详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
86 3
|
3月前
|
存储 缓存 安全
在Java的Map家族中,HashMap和TreeMap各具特色
【10月更文挑战第19天】在Java的Map家族中,HashMap和TreeMap各具特色。HashMap基于哈希表实现,提供O(1)时间复杂度的高效操作,适合性能要求高的场景;TreeMap基于红黑树,提供O(log n)时间复杂度的有序操作,适合需要排序和范围查询的场景。两者在不同需求下各有优势,选择时需根据具体应用场景权衡。
43 2
|
3月前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
34 2
|
3月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
38 1
|
15天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
72 17