`

【面试】Map放进去重复key-value对

    博客分类:
  • Java
阅读更多
  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8. import java.util.Map.Entry;

  9. /**
  10. * 老紫竹JAVA提高教程(11)-认识Map<br>
  11. * 将键映射到值的对象。<br>
  12. * 一个映射不能包含重复的键;每个键最多只能映射到一个值。<br>
  13. * <br>
  14. * 相关API请查看 api.java2000.net/Map
  15. *
  16. * @author 老紫竹 JAVA世纪网(java2000.net)
  17. */
  18. public class Lession {
  19. public static void main(String[] args) {
  20. // 构造一个Map
  21. // 我们使用HashMap进行测试
  22. Map map = new HashMap();

  23. // 查看map是否为空
  24. System.out.println(map.isEmpty()); // true

  25. // 存入数据
  26. // put方法会返回原来的值
  27. // 如果是第一次赋值,则返回null;
  28. System.out.println(map.put("id", "123")); // null
  29. map.put("name", "xyz");

  30. // 再次查看map是否为空
  31. System.out.println(map.isEmpty()); // false

  32. // 查看有多少数据了
  33. System.out.println("size=" + map.size()); // size=2

  34. // 查看所有的数据
  35. showMap(map); // id=>123; name=>xyz;

  36. // 获取数据
  37. System.out.println("name=" + map.get("name")); // name=xyz

  38. // 放入不同key类型的数据
  39. map.put(new Integer(1), new Object());
  40. // 放入集合类型
  41. Set set = new HashSet();
  42. set.add(111);
  43. set.add(222);
  44. List list = new ArrayList();
  45. list.add(333);
  46. list.add(444);
  47. map.put(set, list);
  48. // 甚至放入Map类型
  49. Map m = new HashMap();
  50. m.put("mm", "mmmm");
  51. map.put(m, "map in map");

  52. // id=>123; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz;
  53. // [222, 111]=>[333, 444];
  54. showMap(map);

  55. // 我们尝试放入重复key的数据
  56. System.out.println(map.put("id", "456")); // 123

  57. // 可以看到,原来的数据value被覆盖了
  58. // id=>456; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz;
  59. // [222, 111]=>[333, 444];
  60. showMap(map);

  61. // 检查是否存在我们需要的数据
  62. // 查找key值
  63. System.out.println(map.containsKey("name")); // true
  64. // 查找Value
  65. System.out.println(map.containsValue(list)); // true

  66. // 删除一些数据
  67. // 是根据key进行删除的
  68. System.out.println(map.remove(m)); // map in map
  69. showMap(map); // id=>456; 1=>java.lang.Object@de6ced; name=>xyz; [222,
  70. // 111]=>[333, 444];

  71. // Entry的集合
  72. // 内部就是Map实现的,所以对其操作是互相影响的
  73. // 不支持add操作,
  74. Set<Entry> ms = map.entrySet();

  75. // [id=456, 1=java.lang.Object@de6ced, name=xyz, [222, 111]=[333, 444]]
  76. System.out.println(ms);
  77. System.out.println(ms.size() + "/" + map.size()); // 4/4

  78. // 尝试通过entrySet删除
  79. Iterator<Entry> it = ms.iterator();
  80. if (it.hasNext()) {
  81. Entry e = it.next();
  82. System.out.println(e.getKey() + "=" + e.getValue()); // id=456
  83. it.remove();
  84. }
  85. System.out.println(ms.size() + "/" + map.size()); // 3/3

  86. // 清除所有数据
  87. map.clear();
  88. System.out.println(ms.size() + "/" + map.size()); // 0/0
  89. }

  90. public static void showMap(Map map) {
  91. // 迭代Key的操作
  92. Iterator it = map.keySet().iterator();
  93. Object key;
  94. while (it.hasNext()) {
  95. key = it.next();
  96. System.out.print(key + "=>" + map.get(key) + "; ");
  97. }
  98. System.out.println();
  99. }
  100. }



欢迎访问老紫竹的网站(http://www.java2000.net)和我在CSDN的博客(http://blog.csdn.net/java2000_net);
2 运行结果

true
null
false
size=2
id=>123; name=>xyz;
name=xyz
id=>123; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz; [222, 111]=>[333, 444];
123
id=>456; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz; [222, 111]=>[333, 444];
true
true
map in map
id=>456; 1=>java.lang.Object@de6ced; name=>xyz; [222, 111]=>[333, 444];
[id=456, 1=java.lang.Object@de6ced, name=xyz, [222, 111]=[333, 444]]
4/4
id=456
3/3
0/0


3 测试:
尝试放入各种对象类型,并检测和删除它们

4 总结
map的put和get是关键,不同的实现Map的方式有一点差别,我们会在后面的介绍里讲解常用的Map实现

分享到:
评论

相关推荐

    Java面试题,冲冲冲!.rar

    每天一道面试题,周五冲冲冲!List、Set、Queue和Map是Java集合框架中的四个主要接口,它们各自具有不同的特点和用途。...- 使用键值对(key-value)的方式存储元素。 - 键是唯一的,不允许重复,每个键关联一个值。

    Java集合常见面试题总结(上)-JavaGuide面经思维导图总结

    - **Map**:使用键值对(key-value)的方式存储数据,其中键是唯一的,而值可以重复。 #### 二、集合框架底层数据结构总结 ##### 1. `List` - **ArrayList** - 底层使用`Object[]`数组实现。 - 特点:随机访问...

    java程序员面试题

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者...

    前端大厂最新面试题-set_map.docx

    set() 方法设置键名 key 对应的键值为 value,然后返回整个 Map 结构。如果 key 已经有值,则键值会被更新,否则就新生成该键。 6. Set 和 Map 的区别:Set 是一种无序、不重复的数据结构,而 Map 是一种键值对的...

    Java集合框架常见面试题.pdf

    - key在Map中是唯一的,而value可以重复。 - key和value之间通过y=f(x)的方式进行映射,即通过一个键获取对应的值。 6. 集合框架的遍历方法: - 集合框架提供了多种遍历集合的方法,如迭代器(Iterator)、增强...

    Java集合部分面试题.docx

    - **Map不继承Collection接口**:Map不是集合的子集,它包含key-value对,不适用于“一组对象”的概念。Map提供了key或value的列表集合,但不是直接继承自Collection。 3. **Collections工具类**: - Collections...

    2021最新版数据结构与算法面试题手册 1.pdf

    1. **HashMap内部结构**:HashMap类使用Entry这个内部类来存储key-value对。当put方法被调用时,HashMap会为key-value对实例化一个Entry对象,并将其存储在Entry数组table中。数组中每个位置(桶)的存放是依据key的...

    Java集合Map常见问题_动力节点Java学院整理

    在面试中,Map,特别是HashMap,常常成为考察的重点。以下是一些关于HashMap及相关概念的详细解释: 1. **HashMap的工作原理**:HashMap是基于哈希表实现的,通过键的hashCode()方法找到对应的桶(bucket)位置来...

    02-Java集合容器面试题-重点.docx

    Map接口是Java集合框架中的一种接口,提供了对 Key-Value 对的添加、删除、遍历等操作。Map接口的实现类有HashMap等。 HashMap HashMap是Map接口的一种实现类,提供了高效的 Key-Value 对的添加和删除操作。...

    HashMap常见面试题,简述以及对源码操作分析

    HashMap常见面试题,简述以及对源码操作分析 HashMap是我们非常常用的数据结构,由数组和链表组合构成的数据结构。数组里面每个地方都存了Key-Value这样的实例,在Java7之前是Entry,在Java8中叫Node因为它本身所有...

    iOS面试题-千峰教育欧阳大神整理

    - KVC(Key-Value Coding)与KVO(Key-Value Observing):属性存取的动态方式,以及观察对象属性变化。 2. **C++基础** - 类和对象:理解封装、继承、多态等面向对象特性。 - 动态内存管理:指针操作,new/...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Map接口用于保存具有key-value映射关系的数据,常见的Map实现包括HashMap、TreeMap、HashTable和LinkedHashMap等。Queue是Java提供的队列实现。 本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的...

    99%的海量数据处理面试题

    关联式容器中的每个元素都是一个Key-Value对,元素在容器内部根据键值进行排序或定位。这种结构类似于数据库中的关系模型,允许快速查找和操作。例如,MongoDB文档中的Key-Value对结构,可以包含不同类型的数据,并...

    大数据 40 道面试题及答案.docx

    - 之后会对key进行sort排序,grouping分组操作将相同key的value合并分组输出,在这里可以使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义...

    大数据2023届秋招各中大厂常问面试题

    - Map:键值对,键不可重复,值可重复。 6. **JVM内存区域** - 线程私有:程序计数器、虚拟机栈、本地方法栈。 - 线程共享:堆内存、方法区。 7. **创建线程的方式** - 继承Thread类。 - 实现Runnable接口。 ...

    Java面试问题整理.docx

    - `Map`接口存储键值对(key-value pairs),其中键(key)是唯一的,但值(value)可以重复。 - 常见的实现类有`HashMap`、`TreeMap`等。 3. **迭代器** (`Iterator`) - 所有集合类都支持`Iterator`接口,用于...

Global site tag (gtag.js) - Google Analytics