HashMap入门以及leetcode实例

初认识:HashMap =  数组  + 单向链表

为什么呢? 

数组方便查找,如nums[i],但难增删改

链表方便增删改,但难查找(如单链表需要从head节点开始逐级向下查找)

hashMap集结二者优势,是最优选

HashMap初认识

1.你以为的 简单的 key ——value 

2.实际上  :由key算出hashcode,几组一样hashcode的键值对分到一起,原理图例:

 可以看作key为4,8的同学经过hashcode的换算,分到了第0组-》方便查找

 key value 中其实是存在链表节点的,(这就是说hashMap其实包含了单向链表的功能)

 HashMap的使用

 1.创建系统自带的HashMap类

val map :HashMap<Key类型,Value类型> = HashMap()

2.往map添加键值对

map.put(Key值,Value值)

3.通过Key拿到map里的value

map.get(Key值)
 

4.由key || value遍历hashmap判断是否存在这个key  ||  value

map.containsKey(Key值 || value值)

Leetcodel两数之和问题
 由于数据单一,并且涉及查找数据,所以这里哈希表和数组同样方便

源码(含注释和检验代码)

class Solution {

      fun twoSum(nums:IntArray, target: Int): IntArray? {
          val map :HashMap<Int,Int> = HashMap()
          //i 只是代表索引值,不占内存, 且indices代表  0 <= i <= nums.size
          for ( i in nums.indices){
              //通过判断键是否相同,来获取值
              if (map.containsKey(target - nums[i])){

                   // 终端输出,通过key获取哈希表的value(注意我们把数组值放入Key,把对应索引值放入value)
                   map.get(target - nums[i])?.let { intArrayOf(it,i) }.also {
                       print("${it?.get(0)},${it?.get(1)}")
                       return it
                   }
              }
              //将不符合条件的组合封装成键值对,加到map
              map.put(nums[i],i)
          }
          //此时正常情况下不再有返回值,抛出异常即可代替return
        throw IllegalAccessException("no such two solutions")
      }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值