java中的Map接口(Hashtable ,properties ,HashMap , LinkedHashMap , TreeMap)

Map接口的特点

  • Map用于保存具有映射关系的数据:key,Value
  • 补充:Collection接口 也是有映射关系的,底层Value 让一个static Object类的方法代替了
  • Map中的key不允许重复,和HashSet一样,Value可以相同
  • Map中的Key和Value可以是引用数据类型
  • 在添加的时候,如果HashMap中,已经有Key值相同的元素,会替换掉旧的,用新的(value被替换)
  • HashMap.get()传入一个Key可以得到Value,因为Key没有重复
  • HashMao是没有实现线程同步的,因此是线程不安全的

HashMap底层分析(可以看我前面分析的HashSet)

 

 

Hashtable

  • Hashtable的键和值都不能为null
  • Hashtable是线程安全的
  • 扩容机制:(当前大小不 * 2+1)一开始是11个空间,当到达11*0.75 = 8个时,就会扩容到23个(11 * 2 + 1)

Hashtable和HashMap比较

proprites

 

 

 

开发中如何选择集合

 

 

 

Map接口的遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.util.*;
 
public class text {
    public static void main(String[] args) {
        HashMap hm = new HashMap<>();
        hm.put(1, "平凡晨");
        hm.put(2, "库里");
        hm.put(3, "霍华德");
        hm.put(null, "科比");
        hm.put(4, "詹姆斯");
        hm.put(5, "tom");
        hm.put(6, "jack");
 
        //得到所有的key
        Set<Object> ks = hm.keySet();
 
        System.out.println("=======第一种方式=======");
        //第一种方式 增强for循环 遍历key
        for (Object key : ks) {
            System.out.println(key);
        }
 
        System.out.println("=======第二种方式=======");
        //第二种方式  通过迭代器  遍历key的值
        Iterator<Object> iterator = ks.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
 
        System.out.println("=======第三种方式=======");
        //第三种方式 取出所有 key 和 value
        for (Object key : ks) {
            System.out.println(key + " " + hm.get(key));
        }
 
        System.out.println("=======第四种方式=======");
        //第四种方式  通过迭代器  遍历key 和value
        Iterator<Object> iterator1 = ks.iterator();
        while (iterator1.hasNext()) {
            Object next = iterator1.next();
            System.out.println(next + " " + hm.get(next));
        }
 
        //得到所有的value
        Collection values = hm.values();
 
        System.out.println("=======第五种方式=======");
        Iterator iterator2 = values.iterator();
        while (iterator2.hasNext()) {
            System.out.println(iterator2.next());
        }
 
//        通过 EntrySet 来获取 k-v
        Set set = hm.entrySet();
        System.out.println(set);
 
        System.out.println("=======第六种方式=======");
        Iterator iterator3 = set.iterator();
        while (iterator3.hasNext()) {
            Object next = iterator3.next();//HashMap$Node -实现-> Map.Entry (getKey,getValue)
            //向下转型
            Map.Entry m  = (Map.Entry)next;
            System.out.println(m.getKey() + "-" + m.getValue());
        }
 
        System.out.println("=======第七种方式=======");
        for(Object s :set){
            Map.Entry m = (Map.Entry) s;
            System.out.println( m.getKey() +"-"+ m.getValue());
        }
    }
}

 

posted @   平凡晨  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示