当前位置:首页 » 《关注互联网》 » 正文

【Java】HashMap的简单使用(含小部分源码,get报错问题)

9 人参与  2024年04月01日 09:40  分类 : 《关注互联网》  评论

点击全文阅读


  ?个人主页:哈__

期待您的关注 

一、HashMap的特点

二、HashMap的一些常用方法 

①.put(K key, V value) 将键(key)/值(value)映射存放到Map集合中(HashMap的key值不可重复,如果已经有了该key值的存在,那么就会更新该key的value值)

public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);//向HashMap中添加元素        map.put("Tom1", 700);//向HashMap中添加元素        map.put("Tom", 100);//向HashMap中添加元素        System.out.println(map);    }

 

 ②.get(Object key) 返回指定键所映射的值,没有该key对应的值则返回 null,即获取key对应的value。

 public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);        int scoreTom = map.get("Tom");// 获取key对应的value        int scoreJerry = map.get("Jerry");// 获取key对应的value        System.out.println(scoreTom);        System.out.println(scoreJerry);    }

执行完之后报了一个错。意思就是空指针异常。

Exception in thread "main" java.lang.NullPointerException

为什么会这样我们到源码中查看。进入到get方法。

 public V get(Object key) {        Node<K,V> e;        return (e = getNode(hash(key), key)) == null ? null : e.value;    }

我们到这一层就可以了,仔细看一看,这个get方法返回的是一个三元表达式,如果e等于null就返回null,否则就返回key对应的value,呀?仔细一看没问题啊,方法也没有将异常抛出,我想要获取Jerry的信息,但是Jerry不存在,返回空值,这怎么突然给我报错了?不要急,既然这里没有抛出异常,那这个异常就要返回我们的主程序当中了。我们来研究这两行代码。

HashMap<String, Integer> map = new HashMap<String, Integer>();int scoreJerry = map.get("Jerry");// 获取key对应的value

map的泛型是String,Integer。我们调用map的get方法传入一个String类型字符串,返回的应该是一个Integer类型的对象。好,既然返回的是一个Integer类型的对象,并且我是用的是int来接收这个Integer类型的对象,这个样子就是一个拆箱的过程,将Integer转为int,调用的是Integer的valueOf方法。如果你的Integer压根不存在,那么null怎么调用valueOf去进行拆箱操作?int类型也无法接收一个null值呀,真相大白。

这里不太理解的可以看我的另一篇文章,可能对你有启发。

【Java】Integer 什么是128陷阱(源码分析)-CSDN博客

我们将int改为Integer之后,打印如下。 

③. size()  返回Map集合中数据数量,准确说是返回key-value的组数。

public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);        map.put("Jim", 90);        map.put("Sam", 91);        System.out.println(map);        System.out.println(map.size()); //3    }

 ④:clear() 清空Map集合

public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);        map.put("Jim", 90);        map.put("Sam", 91);        map.clear();// 清空map中的key-value        System.out.println(map.size()); //0    }

 ⑤:isEmpty () 判断Map集合中是否有数据,如果没有则返回true,否则返回false

public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);        map.put("Jim", 90);        map.put("Sam", 91);        System.out.println(map.isEmpty()); //false        map.clear();// 清空map中的key-value        System.out.println(map.isEmpty()); //true    }

 ⑥:remove(Object key) 删除Map集合中键为key的数据并返回其所对应value值。

public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);        map.put("Jim", 90);        map.put("Sam", 91);        System.out.println(map);        map.remove("Tom");        System.out.println(map);    }

 

⑦:containsKey(Object key) Hashmap判断是否含有key

public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);        map.put("Jim", 90);        map.put("Sam", 91);        System.out.println(map.containsKey("Tom")); //true        System.out.println(map.containsKey("Jerry")); //false    }

 ⑧:containsValue(Object value) Hashmap判断是否含有value:

public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        map.put("Tom", 100);        map.put("Jim", 90);        map.put("Sam", 91);        map.put("Jerry",100);        System.out.println(map.containsValue(100)); //true        System.out.println(map.containsValue(88));  //false    }

 ⑨:Hashmap添加另一个同一类型的map下的所有数据

 public static void main(String[] args) {        HashMap<String, Integer> map = new HashMap<String, Integer>();        HashMap<String, Integer> map2 = new HashMap<String, Integer>();        map.put("Tom", 100);        map.put("Jim", 90);        map.put("Sam", 91);        map.put("Jerry",100);        map2.putAll(map);        map2.put("美羊羊",50);        System.out.println(map);        System.out.println(map2);    }

 

 基本的使用就是这些了。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/88780.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 新章速递汤安甯,白子奕,汤贝贝是什么小说(结婚十年,回归家庭的老婆在外有二胎了)完本阅读无广告(结婚十年,回归家庭的老婆在外有二胎了)
  • 娇牛马导师偷我论文99篇成功升博导,我让他牢底坐穿精校文本_周老师师姐师兄爽文_小说后续在线阅读_无删减免费完结_
  • 独家顾宇,罗薇:结局+番外精编之作(资助生装阔气,我可不参加)电子书畅享阅读
  • 宗门全员重生,小师妹摆烂不干了(君拂君芙蓉)_宗门全员重生,小师妹摆烂不干了
  • 成了高考状元后,我倒欠两百万完结txt_阿姨叶青江安TOP10_小说后续在线阅读_无删减免费完结_
  • 嫁绝嗣长官,好孕作精在七零躺赢小说(顾嘉宁)序章+全章阅读(嫁绝嗣长官,好孕作精在七零躺赢)最新章节
  • 秦安,温千雪:+后续现已上架(大宋:开局错把皇帝当亲爹):结局+番外评价五颗星
  • 八零我被判黑五类下矿区后,手撕兼祧两房的丈夫无法释怀_陈叙张悦翠花新鲜出炉_小说后续在线阅读_无删减免费完结_
  • 开局签到天人修为,建立无上神朝无法释怀_叶玄后续+完结_小说后续在线阅读_无删减免费完结_
  • ,沐小暖番外(恶毒后娘她真香)TXT+后续+结局在线阅读
  • 萌萌,多多,阿钰小说(我妈的执念)+前传(萌萌,多多,阿钰)阅读
  • 沈菲,楚思明,楚砚洲(哥哥急需颅内手术,黄金右手的我却拒绝执刀)小说***下载_章节前文+后续(沈菲,楚思明,楚砚洲)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1