常见Java面试题 程序中如何决定使用 HashMap 还是 TreeMap?
2023-09-14 09:05:00 时间
回答方式:
对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。
然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。
基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。
说一下 HashMap 的实现原理?
HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
HashMap的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。
需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)。
如何选择合适的Map?
- HashMap可实现快速存储和检索,但其缺点是其包含的元素是无序的,这导致它在存在大量迭代的情况下表现不佳。
- LinkedHashMap保留了HashMap的优势,且其包含的元素是有序的。它在有大量迭代的情况下表现更好。
- TreeMap能便捷的实现对其内部元素的各种排序,但其一般性能比前两种map差。
LinkedHashMap映射减少了HashMap排序中的混乱,且不会导致TreeMap的性能损失。
相关文章
- java高级工程师面试情景题_Java高级工程师面试题III
- excel宏 java,Microsoft Excel宏运行Java程序
- java locale 中国_Java描述语言、国家和地理的类——Locale
- 反应java程序并行机制的特点_Java语言具有许多优点和特点,下列选项中能反映Java程序并行机制特点的是()。…[通俗易懂]
- c++和java哪个好学_c++语言和Java语言,初学者该如何选择?「建议收藏」
- java 中高级面试题_Java中高级面试题
- java applet介绍,Java Applet教程介绍[通俗易懂]
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- JAVA string转map_java怎么转业务
- 微信开发SDK java版,支持maven;微信Java开发工具包,支持包括微信支付、开放平台、公众号、企业微信/企业号、小程序等微信功能模块的后端开发。
- java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换
- Java集合面试题_java是什么
- JAVA为啥要用stream流处理_java哪个部分最难学
- 一道非常棘手的 Java 面试题:i++ 是线程安全的吗?
- 【错误记录】生成 Java 文档错误 ( Xxx.java:xx: 错误: 编码GBK的不可映射字符 )
- 从java到JavaScript(2):对比Java/Go/Swift/Rust看Dart
- 实现Java程序操作MySQL数据库(java调用mysql)
- Linux环境下编译Java程序的指南(linux编译java)
- java搭建Linux环境下的Java SDK(sdk-linux)
- Linux上部署Java项目实践指南(linux部署java项目)
- Linux环境中如何顺利执行Java程序?(linux下执行java)
- 如何在Linux系统下有效地启动Java程序,让你的代码在Linux中也能正常运行?(linux下启动java)
- 程序Oracle调用Java程序的实现方法(oracle调用java)
- 期Java开发高效配置MySQL长期支撑(mysql java 长)
- 异常Java程序捕获Oracle异常从失败中学习(java捕获oracle)
- Java导出Oracle数据提升数据分析流程效率(java导出oracle)
- Java使用Oracle实现优雅数据查询(java.oracle)
- Java程序中使用Redis链接提升效率(redis 链接java)