我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java之使用HashMap.values()方法出错怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java之使用HashMap.values()方法出错怎么解决

本篇内容介绍了“Java之使用HashMap.values()方法出错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    HashMap.values()方法的误用

    出错

    今天在测试代码的时候发现程序报错,看代码才知道是使用HashMap.values()方法的时候出错。

    因为项目中需要获取Map的值的集合然后进行遍历,所以就很自然的调用了HashMap.values()方法,如下所示

    package collections; import java.util.HashMap;import java.util.List;import java.util.Map; public class Test {         public static void main(String[] args) {                  Map<String,String> map = new HashMap<String,String>();        map.put("A", "A");        map.put("B", "B");        map.put("C", "C");        map.put("D", "D");        map.put("E", "E");        List<String> valuesList = (List<String>) map.values();        for(String str:valuesList){            System.out.println(str);        }    } }  

    运行时候抛出异常,异常信息如下:

    Exception in thread "main" java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List
        at collections.Test.main(Test.java:20)

    错误原因分析

    首先找到了values()方法所在的源码,信息如下:

    public Collection<V> values() {      Collection<V> vs = values;      return (vs != null ? vs : (values = new Values()));  }

    原来values()方法只是返回了一个Collection集合,可是如程序中的用法所示,在向下转型的时候出现了类型转换错误。那我们应该怎么才能获取自己想要的结构呢?

    解决方法

    在ArrayList中,有一个构造函数

    public ArrayList(Collection<? extends E> c) {    elementData = c.toArray();    size = elementData.length;    // c.toArray might (incorrectly) not return Object[] (see 6260652)    if (elementData.getClass() != Object[].class)        elementData = Arrays.copyOf(elementData, size, Object[].class);}  

    可以接受一个集合类型的参数,然后返回一个list;这样就达到了预期目的。

    代码如下

    package collections; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; public class Test {         public static void main(String[] args) {                  Map<String,String> map = new HashMap<String,String>();        map.put("A", "A");        map.put("B", "B");        map.put("C", "C");        map.put("D", "D");        map.put("E", "E");        //List<String> valuesList = (List<String>) map.values();        List<String> valuesList = new ArrayList<String>(map.values());        for(String str:valuesList){            System.out.println(str);        }    }}

    HashMap 常用方法

    HashMap 简单知识点

    Map 集合即 Key-Value 的集合,前面加个 Hash,即散列,无序的。所以 HashMap 是一个用于存储Key-Value键值对的无序集合,每一个键值对也叫做Entry。

    在 JDK1.8 之前,HashMap 采用数组+链表实现,即使用链表处理冲突,同一 hash 值的节点都存储在一个链表里。但是当位于一个桶中的元素较多,即 hash 值相等的元素较多时,通过 key 值查找要遍历链表,时间复杂度为 O(N),效率较低。

    因此 JDK1.8 中,HashMap 采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,时间复杂度为 O(logN),这样大大减少了查找时间。

    用一段代码来介绍常用方法

    package a;import java.util.HashMap;import java.util.Map.Entry;public class Main{    public static void main(String[] args){    HashMap<String,Integer> mp = new HashMap<String,Integer>();    mp.put("one",1);//存放键值对    System.out.println(mp.get("one"));//通过键取值,输出 1    System.out.println(mp.get("1"));//通过键取值,不存在,输出 null    System.out.println("====================");        System.out.println(mp.containsKey("one"));//HashMap中是否包含该键,输出true    System.out.println(mp.containsKey("two"));//不包含该键,输出false    System.out.println("====================");        System.out.println(mp.containsValue(1));//HashMap中是否包含该值,输出true    System.out.println(mp.containsValue(2));//不包含该值,输出false    System.out.println("====================");        System.out.println(mp.isEmpty());//判断是否为空,输出false    System.out.println(mp.size()); //输出 HasMap 的长度,1    System.out.println("====================");        mp.remove("one");//从HashMap中删除该键,值也会被删除    System.out.println(mp.get("one"));//输出null    System.out.println(mp.containsKey("one"));//输出false    System.out.println(mp.containsValue(1));//输出false    //也可以通过 mp.remove("one",1); 把键和值一起删掉    System.out.println("====================");        mp.put("one", 1);    mp.put("two", 2);    mp.put("three", 3);    System.out.println(mp.values());//输出所有值,[1, 2, 3]    System.out.println(mp.keySet());//输出所有键,[one, two, three]    System.out.println(mp.entrySet());//输出所有键和值,[one=1, two=2, three=3],中括号    System.out.println("====================");        HashMap<String,Integer> mp2 = new HashMap<String,Integer>();    mp2.put("four", 4);    mp.putAll(mp2);//添加同类型另一个HashMap,放进头部    System.out.println(mp);//输出整个HashMap的键和值,{four=4, one=1, two=2, three=3},大括号    System.out.println("====================");        mp.replace("one", 5);//替换键的值,java8才有    mp.replace("two", 2 , 6);//替换键的旧值为新值    System.out.println(mp);//输出{four=4, one=5, two=6, three=3}    System.out.println("====================");        Object mp3 = mp.clone();//克隆一个,顺序随机    System.out.println(mp3);//输出{two=6, three=3, four=4, one=5}    System.out.println("====================");        for(String key:mp.keySet())//遍历整个HashMap的键    System.out.print(key+' ');//输出four one two three     System.out.println();    for(Integer values:mp.values())//遍历整个HashMap的值    System.out.print(values+' ');//输出36373835,并不是4 5 6 3 ,说明该方法不能输出值    System.out.println();    for(Entry<String,Integer> entry:mp.entrySet()) {//遍历整个HashMap,输出键值    String key = entry.getKey();    Integer value = entry.getValue();    System.out.print(key+'='+value+' ');//输出four=4 one=5 two=6 three=3     }    System.out.println();    System.out.println("====================");        mp.clear();//清空数组    System.out.println(mp); //输出{}    System.out.println("====================");    }}

    输出结果:

    1
    null
    ====================
    true
    false
    ====================
    true
    false
    ====================
    false
    1
    ====================
    null
    false
    false
    ====================
    [1, 2, 3]
    [one, two, three]
    [one=1, two=2, three=3]
    ====================
    {four=4, one=1, two=2, three=3}
    ====================
    {four=4, one=5, two=6, three=3}
    ====================
    {two=6, three=3, four=4, one=5}
    ====================
    four one two three 
    36373835
    four=4 one=5 two=6 three=3 
    ====================
    {}
    ====================

    “Java之使用HashMap.values()方法出错怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Java之使用HashMap.values()方法出错怎么解决

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Java之使用HashMap.values()方法出错怎么解决

    本篇内容介绍了“Java之使用HashMap.values()方法出错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HashMap.
    2023-07-05

    Java之HashMap.values()转List时错误怎么解决

    这篇文章主要介绍“Java之HashMap.values()转List时错误怎么解决”,在日常操作中,相信很多人在Java之HashMap.values()转List时错误怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
    2023-07-05

    Java之HashMap.values()方法的误用解读

    这篇文章主要介绍了Java之HashMap.values()方法的误用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-22

    java indexof方法使用报错怎么解决

    要解决Java中indexOf方法的使用报错,可以采取以下步骤:确认报错信息:检查报错信息,查看具体的错误类型和位置。检查调用方法的对象:确认使用indexOf方法的对象是否存在或已初始化。如果对象为null,则会引发NullPointer
    2023-10-24

    java中write方法使用报错怎么解决

    在Java中,`write`方法是用于将字符或字节写入输出流的方法。如果您遇到了`write`方法使用报错,可以根据具体的错误信息来解决问题。以下是一些常见的错误和解决方法:1. `write`方法未定义:这可能是因为您没有正确导入相关的包
    2023-08-08

    Java调用webservice出错怎么解决

    在Java中调用Web服务时出现错误可能是由于以下几个常见原因导致的:URL错误:请确保提供的Web服务URL是正确的,并且可以在Java代码中访问到。代理设置:如果您的网络环境使用了代理服务器,请确保在Java代码中正确配置了代理设置。S
    2023-10-21

    Java出现Error: Java heap space错误的解决方法

    本篇内容主要讲解“Java出现Error: Java heap space错误的解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java出现Error: Java heap space错误
    2023-06-03

    Wordpress更换主题之后出错的解决方法

    今天吃完午饭,休息休息,最近搞了一下google adsense,不过最终的审核没通过,我想会不会是界面不好看呢,饭后就在电脑旁,更换了几个wordpresuyllws主题,我的博客使用wordpres编程客栈s搭建的。换了四五个,也没有特
    2022-06-12

    Java中的输出方法怎么使用

    在Java中,可以使用以下方法进行输出:1. 使用System.out.println()方法:这是最常用的输出方法之一,用于将结果打印到控制台并换行。```javaSystem.out.println("Hello, World!");`
    2023-09-20

    使用云服务器出错怎么解决

    遇到云服务器出错的情况,可以采取以下解决方法:1. 检查错误日志:查看服务器的错误日志,了解具体的错误信息和原因,以便更好地解决问题。2. 重启服务器:尝试重启服务器,有时候问题可能只是暂时的,重启后可能会恢复正常运行。3. 检查网络连接:
    2023-09-22

    使用云服务器出错怎么解决

    排查云服务器错误解决方案检查网络、操作系统、硬件、应用程序、环境配置、数据库和安全问题。使用ping测试网络连接,更新操作系统,排查硬件故障,查看应用程序日志,验证环境变量,检查数据库连接,更新安全补丁,启用防火墙,并利用论坛或技术支持寻求帮助。定期记录、备份和更新可提高故障排除效率和数据安全。
    使用云服务器出错怎么解决
    2024-04-11

    CentOS 6.3下使用Nagios出现错误的解决方法

    这篇文章主要介绍“CentOS 6.3下使用Nagios出现错误的解决方法”,在日常操作中,相信很多人在CentOS 6.3下使用Nagios出现错误的解决方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C
    2023-06-16

    java反射之invoke方法怎么使用

    Java反射中的invoke方法用于调用指定对象的方法。它的使用方式如下:1. 获取Class对象:首先需要获取到要调用方法的对象的Class对象,可以使用`Class.forName()`方法或者直接使用对象的`getClass()`方法
    2023-08-18

    php之laravel调度执行及出错的解决方法

    小编给大家分享一下php之laravel调度执行及出错的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与非主流的数据库。4、面向
    2023-06-14

    Win8.1玩神之浩劫出现错误14001的解决方法

    Win8.1玩神之浩劫出现错误14001怎么办?《神之浩劫》是一款基于Unreal 3(虚幻3)游戏引擎开发的3D团队竞技游戏,一位Win8.1用户在玩神之浩劫游戏时出错了,错误码为:14001,并且还提示找不到MctsInterface.
    2022-06-04

    GD编译出错解决方法是怎样的

    这期内容当中小编将会给大家带来有关GD编译出错解决方法是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。编译最新的2.0.35版本,用默认的 ./configure编译 当make的时候,出现以下错误
    2023-06-13

    java类里面的方法不能使用怎么解决

    要解决Java类中的方法无法使用的问题,可以考虑以下几种解决方法:1. 检查方法的访问修饰符:确保方法的访问修饰符是public或者是protected,这样才能在其他类中被访问到。2. 检查方法的参数和返回类型:确保方法的参数和返回类型与
    2023-08-28

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录