zoukankan      html  css  js  c++  java
  • HashMap用法总结

    今天对HashMap进行一个系统总结;

    起因是在leetcode上做两数组之和想起解决思路,用hash去写,发现自己对hash不是很熟悉运用,于是恶补了下

    首先,对hash创建

    HashMap<Integer, String> Sites = new HashMap<Integer, String>();

    其中key-value前面的泛型必须要加上的,后面的泛型是可去可不去,jdk1.8以后官方是推荐去调,不要写滴~

    方法:

          hash.put(key,value)

          hash.size();---------会去掉重复的那个值

          hash.containsKey(key)-------会返回一个布尔型的值判断存不存在

    底层原理:主要是数组加链表,链表链接的是Entry实体,实体中有(key,value,hsahcode,next)next指针是防止有hash冲突可以挂在一起,为防止挂太多采取了一系列措施:比如

    1,约束因子控制在0.75,太大空间利用率太多,冲突就会多,太少就空间十分浪费

    2,利用红黑树,当node节点超过8个·的时候,会构建红黑树(红黑树这个坑过两天来填)

    3,系统自带的扩容机制,其一定是2的倍数,因为是用位移来形成的,扩容的最大是为2^30,默认位置是16

     

    面试考点,为什么底层求hashcode是用位运算而不是咱们讲的逻辑中的h%(length)操作,实际上h&(length-1)是一样的效果但是位运算效率更高;

    5,也正因为底层用的是与运算,hash得是2的倍数(目的:可以有效的减少一定的hash冲突)

    public static void main(String[] args){
      Map map = new HashMap();  //定义Map对象
      map.put("apple","新鲜的苹果");  //向集合中添加对象
      map.put("computer","配置优良的计算机");
      map.put("book","堆积成山的图书");
      map.put("time",new Date());
      String key = "book";
      boolean contains=map.containsKey(key);  //判断是否包含指定的键值
      if(contains){  //如果条件为真
        System.out.println("在Map集合中包含键名"+key);  //输出信息
      }else{
        System.out.println("在Map集合中不包含键名"+key);
      }
    }

     最后,回到正题:

    题目:

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    你可以按任意顺序返回答案

    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]
    解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

    ac了,

  • 相关阅读:
    【VUE】数据库动态渲染标签,并且动态绑定事件与激活图标
    Linux shell select
    ceph介绍和安装
    C# 保存网络图片至本地项目中
    CS229 斯坦福大学机器学习复习材料(数学基础)
    SPRING.NET FRAMEWORK 3.0 GA啦
    U盘装机神器
    一行css让网页风格变成暗黑模式
    vue3 自学(一)基础知识学习和搭建一个脚手架
    windows使用nvm管理node不同版本
  • 原文地址:https://www.cnblogs.com/orange0/p/15322320.html
Copyright © 2011-2022 走看看