`
john201314
  • 浏览: 8439 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

HashMap 取值应注意key的类型

    博客分类:
  • java
阅读更多
 Map<Long,String> hashMap = new HashMap<Long,String>();
        hashMap.put(new Long(1), "A");
        System.out.println(hashMap.get(new Integer(1)));

发现取的值为null.

这是因为取值的时候没有与key的类型匹配。

这是取值的逻辑代码
   final Entry<K,V> getEntry(Object key) {
        int hash = (key == null) ? 0 : hash(key);
        for (Entry<K,V> e = table[indexFor(hash, table.length)];
             e != null;
             e = e.next) {
            Object k;
            if (e.hash == hash &&
                ((k = e.key) == key || (key != null && key.equals(k))))
                return e;
        }
        return null;
    }


但是Integer的equals方法
  public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }


Long的equals方法
  public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }


即使值相等,但因为类型不匹配,并且HashMap接受的参数类型是Object,它这样设计的用途是为了所有的类型都通用。但是HashMap本身就没声明说,一定要类型对才能取值。
哈哈以后要注意了。
0
0
分享到:
评论

相关推荐

    易语言HashMap类

    易语言HashMap类是一种在易语言编程环境中实现的高效数据结构,它主要用于存储键值对(key-value pairs),提供快速的数据存取。HashMap类基于哈希表(Hash Table)原理,通过计算键的散列值来确定数据在内存中的...

    HashMap与HashTable和HashSet的区别

    与`HashTable`相比,`HashMap`最大的不同之处在于它允许`key`和`value`为`null`。 **特点:** - **线程安全性**:`HashMap`不是线程安全的,如果多个线程同时访问,必须在外部进行同步控制。 - **null的支持**:`...

    HashMap 的底层原理Java系列2021.pdf

    HashMap是Java中广泛使用的数据结构之一,它主要用于存储键值对(key-...需要注意的是,由于HashMap在高并发场景下可能会出现线程安全问题,因此在多线程环境下需要采取相应的同步措施或者使用其他线程安全的集合实现。

    HashMap常见面试题,简述以及对源码操作分析

    HashMap常见面试题,简述以及对源码操作分析 HashMap是我们非常常用的数据结构,由数组和链表组合...因为在resize之前,如果使用头插法可能会出现环形链表,如果这个时候去取值,悲剧就会出现了——Infinite Loop。

    嵌套Map或者List获取key、value值

    Map, Map, String&gt;&gt; users = new HashMap(); ``` 获取嵌套Map的key和value通常涉及两个步骤:首先,找到嵌套Map的位置,然后从中提取key和value。在Java中,这可以通过`get()`方法实现: ```java String userId = ...

    json字符串转成 Map/List

    转换成List则需要指定List元素类型: ```java import com.google.gson.Gson; import java.util.List; String jsonString = "[{\"key\":\"value\"}]"; Gson gson = new Gson(); List, Object&gt;&gt; list = gson....

    EL表达式在前后台的取值赋值问题

    Map, String&gt; map = new HashMap(); map.put("key1", "abc"); map.put("key2", "bcd"); request.setAttribute("mapValue", map); ``` - **前台使用**: - `${mapValue}`:取得整个`map`对象; - `${mapValue....

    重要知识java中map集合的用法.pdf

    3. 从 Map 中取值 可以使用 `get()` 方法从 Map 中获取指定键对应的值。例如:`String str = map.get("sa").toString();` 4. 遍历一个 Map 遍历 Map 集合有多种方式,例如使用 `keySet()` 方法获取所有键,使用 `...

    java 中遍历取值异常(Hashtable Enumerator)解决办法

    在实际开发中,遇到此类问题,除了检查迭代器的使用是否正确外,还应考虑以下几点: 1. **检查容器中的元素数量**:确保遍历的容器不为空,且在遍历过程中有可供访问的元素。 2. **及时处理结束条件**:在遍历过程...

    jsp结合javabean的实践

    //HashMap是非常常用的对象,用put(obj key,obj value)赋值,用get(obj key)获得对应的value 对象。 hm.put("sum",new Double(sum_dingdan)); }catch (Exception e){ System.out.println(e.getMessage());...

    Android学习笔记之常用控件

    在上述代码中,我们首先创建了一个HashMap来存储数据,然后创建了一个ArrayAdapter,并将HashMap的键(key)作为列表项显示。最后,我们设置了点击事件监听,当用户点击列表项时,会弹出一个Toast显示所选项目的描述...

    java面试题大全

    - **Map接口**:熟悉HashMap、TreeMap、LinkedHashMap等实现类,以及key-value对的存取方式。 - **泛型**:了解泛型的使用,包括类型通配符、泛型方法和泛型类。 5. **字符串处理** - **String类**:理解String...

    2021-2022计算机二级等级考试试题及答案No.11276.docx

    18. CREATE TABLE语句中的FOREIGN KEY关键字用于定义外键,关联两个表的数据。 19. 表达式*[++p]的值为3,因为p首先自增,然后取值。 20. 查询的输出类型通常包括自由表、数组、临时表,但不包括表单。 21. UDP是...

    Java实现 LeetCode 454 四数相加 II

    整数的取值范围在-2^28到2^28 - 1之间,而结果不会超过2^31 - 1。这些条件确保了问题的规模和答案的范围是可处理的。 题目中给出的一个示例输入是: ```java A = [1, 2] B = [-2, -1] C = [-1, 2] D = [0, 2] ``` ...

    java资源题库

    1. **HashMap的工作原理**:`HashMap`基于哈希表实现,使用键值对(key-value)存储数据。当向`HashMap`中添加元素时,会计算键的哈希值,并将键值对存储在数组的一个位置上。如果发生哈希冲突(即多个键具有相同的...

    2021-2022计算机二级等级考试试题及答案No.18383.docx

    - **域完整性**:定义了列的有效取值范围。 - **用户定义完整性**:用户自定义的一些完整性约束条件。 #### 面向对象的设计方法(题目2) - **知识点概述**:面向对象设计方法强调使用现实世界的概念来抽象和解决...

    详解javaweb中jstl如何循环List中的Map数据

    map = new HashMap,Object&gt;(); map.put("id", i); map.put("name", "oo" + (i + 1)); list.add(map); } model.addAttribute("list", list); ``` 这段代码首先创建了一个ArrayList对象list,然后通过一个循环...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    工程硕士学位论文 ...研究生姓名: 唐帅 导师姓名: 罗军舟 教授 苏生 教授 申请学位类别 工 程 硕 士 学位授予单位 东 南 大 学 工程领域名称 软 件 工 程 论文答辩日期 ...学位授予日期 答辩委员会主席 评阅人 ...

Global site tag (gtag.js) - Google Analytics