Map接口-HashMap
底层逻辑解析:


D.4 通过哈希计算,有可能和C.3 放同一位置

可以连在一起的方式,D.4 和C.3


单向链表,查询效率低,可以通过“红黑二叉树”,后期讲解...
常用方法:
1 import java.util.Collection; 2 import java.util.HashMap; 3 import java.util.Map; 4 import java.util.Set; 5 6 public class DemoClass4HashMap { 7 public static void main(String[] args) { 8 //TODO HashMap 继承Map接口 9 // 数组存储键值对,无序的 10 11 /* 12 * 1. put()添加数据,如果key存在,在添加相同的key,newValue替换oldVaue,并返回oldValue 13 * */ 14 HashMap map = new HashMap(); 15 /*map.put("1", "zhangsan"); 16 map.put("2", "lisi"); 17 map.put("3", "wangwu"); 18 System.out.println(map); //{1=zhangsan, 2=lisi, 3=wangwu}*/ 19 20 /*map.put("1", "zhangsan"); 21 map.put("2", "lisi"); 22 map.put("3", "wangwu"); 23 map.put("1", "zhaoliu"); 24 System.out.println(map); //{1=zhaoliu, 2=lisi, 3=wangwu} 因为key都是1,所以zhaoliu替换了zhangsan*/ 25 26 /* map.put("1", "zhangsan"); 27 map.put("2", "lisi"); 28 map.put("3", "wangwu"); 29 System.out.println(map.put("1", "zhaoliu")); 30 //put可以实现修改的作用,有返回值,返回值为:被修改的值 例如: 31 System.out.println(map);*/ 32 /* 33 * 结果: 34 * zhangsan 35 {1=zhaoliu, 2=lisi, 3=wangwu} 36 * */ 37 38 /* 39 * 1.1 putIfAbsent() 添加数据,如果key存在,在新增不起作用 40 * */ 41 /* map.putIfAbsent("1", "zhangsan"); 42 map.putIfAbsent("2", "lisi"); 43 map.putIfAbsent("3", "wangwu"); 44 map.putIfAbsent("1", "zhaoliu"); 45 System.out.println(map);*/ 46 /* 47 * 结果:{1=zhangsan, 2=lisi, 3=wangwu} 48 * 因为1 已经有了,即便添加zhaoliu,也不行,不清作用 49 * */ 50 51 /* 52 * 2. 查询数据 53 * */ 54 //System.out.println(map.get("1")); //zhaoliu 55 56 /* 57 * 3.删除数据 58 * */ 59 //map.remove("1"); //key=1 满足这个条件就删除 60 //map.remove("1", "zhangsan"); //key=1, value=zhangsan 两个条件都满足才删除 61 //System.out.println(map); //{2=lisi, 3=wangwu} 62 63 /* 64 * 4. replace() 修改方法,(除了put实现替换修改,不推荐),并返回修改前的值 65 * */ 66 /*map.putIfAbsent("1", "zhangsan"); 67 map.putIfAbsent("2", "lisi"); 68 map.putIfAbsent("3", "wangwu"); 69 System.out.println(map); //{1=zhangsan, 2=lisi, 3=wangwu} 70 71 Object obj = map.replace("1", "zhaoliu"); 72 System.out.println("OldValue="+obj); //OldValue=zhangsan 73 74 Object obj2 = map.replace("4", "zhaoliu"); 75 System.out.println("OldValue2="+obj2); //OldValue2=null 76 77 System.out.println(map); //{1=zhaoliu, 2=lisi, 3=wangwu}*/ 78 79 80 /* 81 * 5. 常用方法 keySet() containsKey() values() containsValue() entrySet() 82 * */ 83 84 //获取Map里所有的key 85 map.putIfAbsent("1", "zhangsan"); 86 map.putIfAbsent("2", "lisi"); 87 map.putIfAbsent("3", "wangwu"); 88 System.out.println(map); //{1=zhangsan, 2=lisi, 3=wangwu} 89 90 //获取所有的key值 91 Set set = map.keySet(); 92 for (Object o : set) { 93 System.out.println(o+"-"+map.get(o)); 94 } 95 System.out.println(map.containsKey("1")); 96 97 //同理 获取所有的value值 98 Collection values = map.values(); 99 System.out.println(map.containsValue("zhangsan")); 100 101 System.out.println("-----获取键值对象-------"); 102 //获取键值对象 103 HashMap<String, String> map2 = new HashMap(); 104 map2.put("1", "zhangsan"); 105 map2.put("2", "lisi"); 106 map2.put("3", "wangwu"); 107 108 //这样泛型写,可以看出来entry是个键值对象 109 Set<Map.Entry<String, String>> entries = map2.entrySet(); 110 for (Map.Entry<String, String> entry : entries) { 111 System.out.println(entry); 112 System.out.println("key="+ entry.getKey() +"---"+ "value="+entry.getValue()); 113 } 114 /* 115 * 输出结果: 116 1=zhangsan 117 key=1---value=zhangsan 118 2=lisi 119 key=2---value=lisi 120 3=wangwu 121 key=3---value=wangwu 122 * 123 * */ 124 125 map2.size(); 126 map2.isEmpty(); 127 map.clear(); 128 map.clone(); 129 130 } 131 }

浙公网安备 33010602011771号