package cn.learn.Map; /* java.util.Hashtable<k,y> implements Map<k,v> 早期双列集合,jdk1.0开始 同步的,单线程,安全,慢,底层也是哈希表 与HashMap不一样的是,Hashtable key,value不允许存储null Hashtable与vector一样被多线程集合HashMap和ArrayList取代 但是Hashtable的子类Properties依然活跃,它是唯一一个与I/O流相结合的集合 */ public class HashtableClass { }
1 package cn.learn.Map; 2 3 import java.util.HashMap; 4 import java.util.LinkedHashMap; 5 6 /* 7 java.util.LinkedHashMap<k,v> extends HashMap 8 底层原理: 9 哈希表+链表(记录元素的顺序) 10 */ 11 public class LinkedHashMapClass { 12 public static void main(String[] args) { 13 HashMap<String,String> map= new HashMap<>(); 14 map.put("a","b"); 15 map.put("3a","b"); 16 map.put("2a","b"); 17 map.put("1a","b"); 18 System.out.println(map); //key不重复且无序 19 20 LinkedHashMap<String,String> linked = new LinkedHashMap<>(); 21 linked.put("a","b"); 22 linked.put("3a","b"); 23 linked.put("2a","b"); 24 linked.put("1a","b"); 25 System.out.println(linked); //有序且不重复,存取一致 26 } 27 28 }
1 package cn.learn.Map; 2 3 import java.security.Key; 4 import java.util.HashMap; 5 import java.util.Iterator; 6 import java.util.Map; 7 import java.util.Set; 8 9 /* 10 java.util.Map1<k,v> -双列集合 11 一个元素包含两个值(一个key,一个value),key不能重合 12 Map中key和value的数据类型可以相同,也可以不同 13 14 java.util.HashMap<k,v>集合 implements Mqp<k,v>接口 15 HashMap集合的特点 16 1.HashMap集合底层是哈希表:查询的速度特别的快 17 2.存储的元素和取出元素的顺序可能不一致 18 3.底层是:数组+单向链表/红黑树 = 哈希表 19 20 java.util.LinkedHashMap<k,v> extends HashMap<k,v> 21 LinkedHashMap的特点: 22 1.存取元素的顺序一致 23 2.哈希表+链表(保证迭代顺序) 24 25 HashMap存储自定义类型键值 26 Map为了保证唯一性,需要重写hashCode和equals方法,以保证key唯一 27 和HashSet一样,value可不唯一 28 29 30 */ 31 public class MapMethods { 32 public static void main(String[] args) { 33 show1(); 34 } 35 private static void show1(){ 36 HashMap<String,String> hashMap = new HashMap<>(); 37 //put添加集合元素,若key不在,返回value为空,若存在替换value,返回被替换的value 38 System.out.println(hashMap.put("1","da")); //返回null 39 40 System.out.println(hashMap.put("1","da2")); //返回被替换的值da 41 42 System.out.println(hashMap); //打印了不是地址,说明重写了toString方法{1=da2} 43 44 //remove(Object key)删除元素,存在返回删除的value,不存在返回null 45 String remove = hashMap.remove("1"); 46 System.out.println(remove); //da2 47 48 //get(Object key)获取value 49 //containsKey(Object key)判断是否包含指定的键 50 // 包含返回true不包含返回false,和遍历一起使用进行筛选 51 52 //遍历双列集合 53 System.out.println(hashMap.put("2","da29")); 54 System.out.println(hashMap.put("5","da42")); 55 System.out.println(hashMap.put("26","5da2")); 56 57 //KeySet()实际是把Key值取出放入Set<key>集合(不允许重复),则可用迭代器,增强for 58 Iterator<String> iter=hashMap.keySet().iterator(); //此时Set放入的是key值,迭代的也是key值 59 while(iter.hasNext()){ 60 String k= iter.next(); 61 System.out.println(hashMap.get(k)); 62 } 63 //增强for遍历 64 for (String str : hashMap.keySet()) { 65 System.out.println(hashMap.get(str)); 66 } 67 68 /* 69 entrySet遍历 70 在Map集合中有个内部接口Entry,Map.Entry<k,v> 71 作用:当Map集合一创建,就会有个Entry对象(键与值的映射关系),放入Set中 72 返回类型 Set<Map.Entry<K,V>>,再调用Set的iterator方法,使用迭代器,取出Map.Entry<Object,Object> 73 再调用Entry的两个方法遍历 74 Map.Entry有两个方法,getKey和getValue 75 */ 76 //放入Set 77 Set<Map.Entry<String,String>> set = hashMap.entrySet(); 78 //使用迭代器 79 Iterator<Map.Entry<String,String>> it = set.iterator(); 80 //利用迭代器方法遍历 81 while(it.hasNext()){ 82 //取得Set的元素 83 Map.Entry<String,String> entry= it.next(); 84 //调用 Map.Entry的方法 85 System.out.println(entry.getKey()); 86 System.out.println(entry.getValue()); 87 }//当然可以也可以使用增强for循环 88 89 90 } 91 }