java map可以干嘛_Java Map知识点

1、遍历

java遍历Map的方式有多种,一下以代码示例来说明使用:

Map tmap = new HashMap(5);

tmap.put("a", "aa");

tmap.put("b", "bb");

tmap.put("c", "cc");

tmap.put("d", "dd");

tmap.put("e", "ee");//常用方式

System.out.println("************ 1 entrySet ************");for (Map.Entrymap : tmap.entrySet()) {

String key=map.getKey();

String value=map.getValue();

System.out.println(key+ ":" +value);

}

System.out.println("************ 2 iterator ************");

Iterator> iterator =tmap.entrySet().iterator();while(iterator.hasNext()) {

Map.Entry next =iterator.next();

System.out.println(next.getKey()+ ":" +next.getValue());

}//只需要map中的键或者值,可以通过keySet或values来实现遍历

System.out.println("************ 3 keySet 通过键找值遍历(效率低)************");

Set keySet =tmap.keySet();for(String key : keySet) {

String value=tmap.get(key);

System.out.println(key+ ":" +value);

}

System.out.println("************ 4 values ************");

Collection values =tmap.values();for(String value : values) {

System.out.println(value);

}//java8

System.out.println("************ 5 java8 forEach ************");

tmap.forEach((key, value)->System.out.println(key+ ":" +value)

);

2、常用Map

2.1 常用Map有HashMap、LinkedHashMap、TreeMap三种:

HashMap是常规的哈希表,查询以及插入的性能最好,在使用中用的较多,因为HashMap是线程不安全的,所以多线程中不好使用。

LinkedHashMap可以指定遍历顺序或者按最近最少使用的顺序,它实现上继承了HashMap,只是比HashMap多维护了一个双链表,故查询及插入性能稍差于HashMap,遍历性能要好于HashMap。在按照元素添加顺序遍历,可以选择使用LinkedHashMap。示例:

System.out.println("*******LinkedHashMap*******");//第三个参数设置true,表示按照访问顺序排序。每次访问一个元素(get或put),被访问的元素都被放到最后。

LinkedHashMap linkedHashMap = new LinkedHashMap(16, 0.75f, true);

linkedHashMap.put("1", "1");

linkedHashMap.put("2", "2");

linkedHashMap.put("3", "3");

loopLinkedHashMap(linkedHashMap);

linkedHashMap.get("1");

loopLinkedHashMap(linkedHashMap);

linkedHashMap.put("4", "4");

loopLinkedHashMap(linkedHashMap);

linkedHashMap.get("3");

loopLinkedHashMap(linkedHashMap);

linkedHashMap.put("5", "5");

loopLinkedHashMap(linkedHashMap);

linkedHashMap.get("2");

loopLinkedHashMap(linkedHashMap);

TreeMap是有序的,它将元素存储在一个红黑树中,存储在它里面的Key必须实现Comparable接口,key是从小到大排好序的。各项性能上相比HashMap来说较差。在需要存储元素需要有序时,可以选择TreeMap。

2.2 同步 Map

2.2.1 使用 Collections.synchronizedMap() 将未同步的 Map 转换为同步的 Map。例:

HashMap hashMap = new HashMap<>();

Map synchronizedMap = Collections.synchronizedMap(hashMap);

2.2.2 ConcurrentReaderHashMap 和 ConcurrentHashMap。

这些 Map 实现是线程安全的,并且不需要对并发访问或更新进行同步,同时还适用于大多数需要 Map 的情况。它们还远比同步的 Map(如 Hashtable)或使用同步的包装器更具伸缩性,并且与 HashMap 相比,它们对性能的破坏很小。util.concurrent 程序包构成了 JSR166 的基础;JSR166 已经开发了一个包含在 Java 1.5 版中的并发实用程序,而 Java 1.5 版将把这些 Map 包含在一个新的 java.util.concurrent 程序包中。

ConcurrentHashMap concurrentHashMap = new ConcurrentHashMap<>();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值