HashMap常用方法&Java 8 HashMap优化特性

HashMap基础

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。另外,HashMap是非线程安全的,也就是说在多线程的环境下,可能会存在问题,而Hashtable是线程安全的。

 

HashMap类图:

 

一、HashMap常用方法

package collection;

import java.util.*;

/**
 * @author XuqiangDuan
 * @Date 2018/9/14 16:45
 **/
public class MapDemo {

    /**
     * @deprecated 该标记为已弃用
     * HashMap 常用方法
     */
    public static void mapMethod() {

        HashMap<String, Integer> hashMap = new HashMap<>();
        hashMap.put("a", 1);
        hashMap.put("b", 2);
        hashMap.put("c", 3);
        hashMap.put("d", 4);
        hashMap.put("e", 5);

        //size
        System.out.println("size: " + hashMap.size());
        //values
        System.out.println("values: " + hashMap.values());
        //keys
        System.out.println("keys: " + hashMap.keySet());

        //entry
        System.out.println("entrySet : " + hashMap.entrySet());
        Set set = hashMap.entrySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            System.out.println("key:" + entry.getKey() + " - value:" + entry.getValue());
        }

        /*
         * putAll
         * 合并时,key相同value更新
         */
        HashMap<String, Integer> hashMapN = new HashMap<>();
        hashMapN.put("e", 55);
        hashMapN.put("f", 66);
        hashMapN.put("g", 77);
        hashMapN.put("h", 88);
        hashMapN.put("i", 99);
        hashMapN.putAll(hashMap);
        System.out.println("N合并后 size: " + hashMapN.size());
        System.out.println("N合并后 values: " + hashMapN.values());

        //JDK8-lambda表达式
        hashMapN.forEach((k, v) -> {
            System.out.println(k + " : " + v);
        });

        //remove
        hashMap.remove("a");
        System.out.println("remove后的size : " + hashMap.size());
        //clear
        hashMap.clear();
        System.out.println("clear后的size : " + hashMap.size());

    }

    /**
     * 主方法
     *
     * @param args
     */
    public static void main(String[] args) {

        //HashMap方法
        MapDemo.mapMethod();

    }
    
}

 

二、Java 8 HashMap优化特性

参考链接:Java 8系列之重新认识HashMap

 

小结

  • 扩容是一个特别耗性能的操作,所以当程序员在使用HashMap的时候,估算map的大小,初始化的时候给一个大致的数值,避免map进行频繁的扩容;
  • 负载因子是可以修改的,也可以大于1,但是建议不要轻易修改,除非情况非常特殊;
  • HashMap是线程不安全的,不要在并发的环境中同时操作HashMap,建议使用ConcurrentHashMap;
  •  JDK1.8引入红黑树大程度优化了HashMap的性能。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值