HashMap -双列集合的遍历与常用的方法

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 }

 

posted @ 2019-09-11 23:27  学之初  阅读(531)  评论(0编辑  收藏  举报