常见Java面试题 程序中如何决定使用 HashMap 还是 TreeMap?
回答方式:
对于在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面试题 程序中如何决定使用 HashMap 还是 TreeMap?相关推荐
- 「面试必备」常见Java面试题大综合 马云见了都点赞
一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理 答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSor ...
- web csrf java_在Java Web应用程序中阻止CSRF
web csrf java 跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CS ...
- 在Java Web应用程序中阻止CSRF
跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CSRF攻击非常简单,我将向您展 ...
- 使用tinylog 1.1改进您在Java EE应用程序中的登录
tinylog是Java的轻量级日志记录框架. 与Apache Log4j和Logback相反,tinylog由仅80KB的单个JAR文件组成,没有任何依赖性,并且具有静态logger类. 这意味着您 ...
- java application pdf_從Java應用程序中即時打開PDF文件
Is there any way to have a code that opens a PDF file in Java application in a platform independant ...
- 2021年面试,整理全网初、中、高级常见Java面试题
面试题答案私信[面试]即可获取,500+道面试题.内容中包含基础.集合.并发.JVM.Spring.Spring MVC.Spring Boot.Spring Cloud.Dubbo.MySQL.Re ...
- 2021年面试,整理全网初、中、高级常见Java面试题附答案
此为部分面试题包含答案,更多面试题见微信小程序 "Java精选面试题",3000+道面试题.内容持续更新中包含基础.集合.并发.JVM.Spring.Spring MVC.Spri ...
- 常见Java面试题之解释内存中的栈、堆和静态区用法
栈(stack).堆(heap)和静态区(static area)的用法区别 * 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间: * 通过new关 ...
- 常见Java面试题之静态变量和实例变量的区别
静态变量和实例变量的区别有哪些? 静态变量和实例变量可能大多数同学用的比较多,但是相关阐述并不是很常见,尤其对新手同学可以不能清楚表达. 静态变量和实例变量也是最经常遇到的一个基础java面试题,不管 ...
最新文章
- Flutter 学习(V2EX)
- c++模板库的一些基本使用
- bat脚本注释多行_cmd批处理常用符号详解
- PHP常量:define和const的不同之处
- oracle中的service_name,instance_name,db_name,oracle_sid,sid_name的用法及区别(转)
- 【JAVA SE】第十二章 流(Stream)、IO流和文件(File)
- block chain
- php 继承性,php面向对象全攻略 (七) 继承性_php基础
- Go语言优秀Web框架
- 【公告】个人站点及系列文章
- Android-Universal-Image-Loader学习笔记(二)--LruDiscCache
- JavaScript判断真值和假值
- MATLAB的简单动画制作
- openEuler软件包加固项目笔记
- 思维导图不会画,没关系,实用思维导图模板分享
- 牛年交个朋友,重新认识一下云和恩墨!
- 二进制换算十进制、八进制和十六进制。
- 提取视频中的音频——python三行程序搞定
- 2022年必看的18个HR面面试题是这些【值得收藏】
- iOS新方法systemFontOfSize: weight: