回答方式:

对于在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?

  1. HashMap可实现快速存储和检索,但其缺点是其包含的元素是无序的,这导致它在存在大量迭代的情况下表现不佳。
  2. LinkedHashMap保留了HashMap的优势,且其包含的元素是有序的。它在有大量迭代的情况下表现更好。
  3. TreeMap能便捷的实现对其内部元素的各种排序,但其一般性能比前两种map差。

LinkedHashMap映射减少了HashMap排序中的混乱,且不会导致TreeMap的性能损失。

常见Java面试题 程序中如何决定使用 HashMap 还是 TreeMap?相关推荐

  1. 「面试必备」常见Java面试题大综合 马云见了都点赞

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理 答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSor ...

  2. web csrf java_在Java Web应用程序中阻止CSRF

    web csrf java 跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CS ...

  3. 在Java Web应用程序中阻止CSRF

    跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CSRF攻击非常简单,我将向您展 ...

  4. 使用tinylog 1.1改进您在Java EE应用程序中的登录

    tinylog是Java的轻量级日志记录框架. 与Apache Log4j和Logback相反,tinylog由仅80KB的单个JAR文件组成,没有任何依赖性,并且具有静态logger类. 这意味着您 ...

  5. 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 ...

  6. 2021年面试,整理全网初、中、高级常见Java面试题

    面试题答案私信[面试]即可获取,500+道面试题.内容中包含基础.集合.并发.JVM.Spring.Spring MVC.Spring Boot.Spring Cloud.Dubbo.MySQL.Re ...

  7. 2021年面试,整理全网初、中、高级常见Java面试题附答案

    此为部分面试题包含答案,更多面试题见微信小程序 "Java精选面试题",3000+道面试题.内容持续更新中包含基础.集合.并发.JVM.Spring.Spring MVC.Spri ...

  8. 常见Java面试题之解释内存中的栈、堆和静态区用法

    栈(stack).堆(heap)和静态区(static area)的用法区别 * 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间: * 通过new关 ...

  9. 常见Java面试题之静态变量和实例变量的区别

    静态变量和实例变量的区别有哪些? 静态变量和实例变量可能大多数同学用的比较多,但是相关阐述并不是很常见,尤其对新手同学可以不能清楚表达. 静态变量和实例变量也是最经常遇到的一个基础java面试题,不管 ...

最新文章

  1. Flutter 学习(V2EX)
  2. c++模板库的一些基本使用
  3. bat脚本注释多行_cmd批处理常用符号详解
  4. PHP常量:define和const的不同之处
  5. oracle中的service_name,instance_name,db_name,oracle_sid,sid_name的用法及区别(转)
  6. 【JAVA SE】第十二章 流(Stream)、IO流和文件(File)
  7. block chain
  8. php 继承性,php面向对象全攻略 (七) 继承性_php基础
  9. Go语言优秀Web框架
  10. 【公告】个人站点及系列文章
  11. Android-Universal-Image-Loader学习笔记(二)--LruDiscCache
  12. JavaScript判断真值和假值
  13. MATLAB的简单动画制作
  14. openEuler软件包加固项目笔记
  15. 思维导图不会画,没关系,实用思维导图模板分享
  16. 牛年交个朋友,重新认识一下云和恩墨!
  17. 二进制换算十进制、八进制和十六进制。
  18. 提取视频中的音频——python三行程序搞定
  19. 2022年必看的18个HR面面试题是这些【值得收藏】
  20. iOS新方法systemFontOfSize: weight:

热门文章

  1. Collections.toMap 报错 空指针 key重复
  2. String对象的intern()
  3. 连接mysql报zone时区错误
  4. vscode 最好的ui主题
  5. 【转载】SpringBoot系列——Swagger2
  6. 网络编程-之粘包现象
  7. Arria10_emif
  8. Android ListView 的优化
  9. Flex Socket 安全沙箱问题解决
  10. 练习系列 - 5、求子数组的最大和