1. import java.util.HashMap;
  2. import java.util.Hashtable;
  3. import java.util.Iterator;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;
  6. import java.util.TreeMap;
  7. /**
  8. * Map用于存储键值对,不允许键重复,值可以重复。
  9. * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
  10. * HashMap最多只允许一条记录的键为null,允许多条记录的值为null。
  11. * HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。
  12. * 如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
  13. * (2)Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;
  14. * 它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
  15. * (3)LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。
  16. * 在遍历的时候会比HashMap慢。
  17. * (4)TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,
  18. * 得到的记录是排过序的。
  19. */
  20. /**
  21. * 演示各个Map的实现类
  22. */
  23. public class TestMap {
  24. /**
  25. * 初始化一个Map
  26. * @param map
  27. */
  28. public static void init(Map map){
  29. if (map != null){
  30. String key = null;
  31. for (int i=5; i>0; i--){
  32. key = new Integer(i).toString() + ".0";
  33. map.put(key, key.toString());
  34. //Map中的键是不重复的,如果插入两个键值一样的记录,
  35. //那么后插入的记录会覆盖先插入的记录
  36. map.put(key, key.toString() + "0");         }
  37. }
  38. }
  39. /**
  40. * 输出一个Map
  41. * @param map
  42. */
  43. public static void output(Map map){
  44. if (map != null){
  45. Object key = null;
  46. Object value = null;
  47. //使用迭代器遍历Map的键,根据键取值
  48. Iterator it = map.keySet().iterator();
  49. while (it.hasNext()){
  50. key = it.next();
  51. value = map.get(key);
  52. System.out.println("key: " + key + "; value: " + value );
  53. }
  54. //或者使用迭代器遍历Map的记录Map.Entry
  55. Map.Entry entry = null;
  56. it = map.entrySet().iterator();
  57. while (it.hasNext()){
  58. //一个Map.Entry代表一条记录
  59. entry = (Map.Entry)it.next();
  60. //通过entry可以获得记录的键和值
  61. System.out.println("key: " + entry.getKey() + "; value: " + entry.getValue());
  62. }
  63. }
  64. }
  65. /**
  66. * 判断map是否包含某个键
  67. * @param map
  68. * @param key
  69. * @return
  70. */
  71. public static boolean containsKey(Map map, Object key){
  72. if (map != null){
  73. return map.containsKey(key);
  74. }
  75. return false;
  76. }
  77. /**
  78. * 判断map是否包含某个值
  79. * @param map
  80. * @param value
  81. * @return
  82. */
  83. public static boolean containsValue(Map map, Object value){
  84. if (map != null){
  85. return map.containsValue(value);
  86. }
  87. return false;
  88. }
  89. /**
  90. * 演示HashMap
  91. */
  92. public static void testHashMap(){
  93. Map myMap = new HashMap();
  94. init(myMap);
  95. //HashMap的键可以为null
  96. myMap.put(null,"ddd");
  97. //HashMap的值可以为null
  98. myMap.put("aaa", null);
  99. output(myMap);
  100. }
  101. /**
  102. * 演示Hashtable
  103. */
  104. public static void testHashtable(){
  105. Map myMap = new Hashtable();
  106. init(myMap);
  107. //Hashtable的键不能为null
  108. //myMap.put(null,"ddd");
  109. //Hashtable的值不能为null
  110. //myMap.put("aaa", null);
  111. output(myMap);
  112. }
  113. /**
  114. * 演示LinkedHashMap
  115. */
  116. public static void testLinkedHashMap(){
  117. Map myMap = new LinkedHashMap();
  118. init(myMap);
  119. //LinkedHashMap的键可以为null
  120. myMap.put(null,"ddd");
  121. //LinkedHashMap的值可以为null
  122. myMap.put("aaa", null);
  123. output(myMap);
  124. }
  125. /**
  126. * 演示TreeMap
  127. */
  128. public static void testTreeMap(){
  129. Map myMap = new TreeMap();
  130. init(myMap);
  131. //TreeMap的键不能为null
  132. //myMap.put(null,"ddd");
  133. //TreeMap的值不能为null
  134. //myMap.put("aaa", null);
  135. output(myMap);
  136. }
  137. public static void main(String[] args) {
  138. System.out.println("采用HashMap");
  139. TestMap.testHashMap();
  140. System.out.println("采用Hashtable");
  141. TestMap.testHashtable();
  142. System.out.println("采用LinkedHashMap");
  143. TestMap.testLinkedHashMap();
  144. System.out.println("采用TreeMap");
  145. TestMap.testTreeMap();
  146. Map myMap = new HashMap();
  147. TestMap.init(myMap);
  148. System.out.println("新初始化一个Map: myMap");
  149. TestMap.output(myMap);
  150. //清空Map
  151. myMap.clear();
  152. System.out.println("将myMap clear后,myMap空了么?  " + myMap.isEmpty());
  153. TestMap.output(myMap);
  154. myMap.put("aaa", "aaaa");
  155. myMap.put("bbb", "bbbb");
  156. //判断Map是否包含某键或者某值
  157. System.out.println("myMap包含键aaa?  "+ TestMap.containsKey(myMap, "aaa"));
  158. System.out.println("myMap包含值aaaa?  "+ TestMap.containsValue(myMap, "aaaa"));
  159. //根据键删除Map中的记录
  160. myMap.remove("aaa");
  161. System.out.println("删除键aaa后,myMap包含键aaa?  "+ TestMap.containsKey(myMap, "aaa"));
  162. //获取Map的记录数
  163. System.out.println("myMap包含的记录数:  " + myMap.size());
  164. }
  165. }

map集合键值对存储,键值不重复,值可以重复的更多相关文章

  1. java 判断Map集合中包含指定的键名,则返回true,否则返回false。

    public static void main(String[] args) { Map map = new HashMap(); //定义Map对象 map.put("apple" ...

  2. Map接口中的常用方法和Map集合遍历键找值方式

    Map接口中定义了很多方法,常用的如下: public V put(K key,V value) 将指定的值与此映射中的指定键相关联(可选操作) V remove(Object key); 如果此映射 ...

  3. Entry键值对对象和Map集合遍历键值对方式

    我们已经知道,Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在IMap 中是一一对应关系, 这一对对象又称做Map 中的一个Entry(项).Entry将键值对的对应 ...

  4. map集合修改其中元素 去除Map集合中所有具有相同值的元素 Properties长久保存的流操作 两种用map记录单词或字母个数的方法

    package com.swift.lianxi; import java.util.HashMap; import java.util.Iterator; import java.util.Map; ...

  5. Map.containsKey方法——判断Map集合对象中是否包含指定的键名

    该方法判断Map集合对象中是否包含指定的键名.如果Map集合中包含指定的键名,则返回true,否则返回false. public static void main(String[] args) { M ...

  6. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  7. Android(java)学习笔记102:Map集合功能概述

    下面通过代码引入Map集合:如下 package cn.itcast_01; import java.util.HashMap; import java.util.Map; /* * 作为学生来说,是 ...

  8. Java基础知识强化之集合框架笔记50:Map集合之Map集合的概述和特点

    1. Map集合的概述: public interface Map<K,V> 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请 ...

  9. Map集合概述和特点

    A:Map集合概述和特点(Set底层依赖的是Map) 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 Map是双列的(是双列集 ...

  10. ES6中的Set和Map集合

    前面的话 在ES6标准制定以前,由于可选的集合类型有限,数组使用的又是数值型索引,因而经常被用于创建队列和栈.如果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集 ...

随机推荐

  1. BC之jrMz and angles

    jrMz and angles  Accepts: 594  Submissions: 1198  Time Limit: 2000/1000 MS (Java/Others)  Memory Lim ...

  2. Esfog_UnityShader教程_UnityShader语法实例浅析

    距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让 ...

  3. Lucene.net 高亮显示搜索词

    网站搜索关键词,往往搜索的结果中,要把用户搜索的词突出显示出来,这就是高亮搜索词的含义.而lucene也恰恰支持这样的操作.在此,我用的是盘古的组件,代码如下: PanGu.HighLight.Sim ...

  4. GCC的gcc和g++区别

    看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g+ ...

  5. Linux学习三:Ubuntu下使用minicom和开发板通信

    备注:如果你是用的是Windows则使用超级终端即可:开始-程序-附件-通讯-超级终端 现在我们在Ubuntu下安装配置minicom: 1.进入ubuntu桌面ctrl+alt+t打开终端 输入:s ...

  6. This kind of launch is configured to open the Debug perspective when it suspends.

    This kind of launch is configured to open the Debug perspective when it suspends. 因为设置了断点才会弹出这个,不需要调 ...

  7. gdb 调试程序

    要调试生成的可执行程序,必须在生成的时候加入-g选项,生成可以调试的代码 例如:gcc -o test a.c b.c -g 这样gcc就会在链接的时候加入一些用于调试的符号 在生成可以调试的可执行程 ...

  8. jquery用append添加按钮之后,按钮监听无法使用的解决方法

    <!DOCTYPE html><html><head><meta charset="utf-8"> <title>< ...

  9. Android 自定义表格显示数据

    Android 自定义TextView控件,用来组成表格方便数据的展示. 首先看一下效果 样式不是很好看,需要用的可以自己优化一下. 实现方式很简单. 1.自定义控件 MyTableTextView ...

  10. Neo4j创建自动索引

    一.创建Neo4j的Legacy indexing 1.为节点创建索引 官方API的创建示例为: 将一节点添加至索引: public static void AddNodeIndex(String n ...