前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java】HashMap的简单使用(含小部分源码,get报错问题)

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

作者头像
哈__
发布2024-04-08 21:24:31
980
发布2024-04-08 21:24:31
举报
文章被收录于专栏:哈哈熊哈哈熊
一、HashMap的特点

二、HashMap的一些常用方法

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

代码语言:javascript
复制
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。

代码语言:javascript
复制
 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);
    }

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

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException

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

代码语言:javascript
复制
 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不存在,返回空值,这怎么突然给我报错了?不要急,既然这里没有抛出异常,那这个异常就要返回我们的主程序当中了。我们来研究这两行代码。

代码语言:javascript
复制
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的组数。

代码语言:javascript
复制
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集合

代码语言:javascript
复制
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

代码语言:javascript
复制
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值。

代码语言:javascript
复制
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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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下的所有数据

代码语言:javascript
复制
 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);

    }

基本的使用就是这些了。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com