java HashMap,TreeMap与LinkedHashMap的详解

 更新时间:2016年11月28日 10:13:41   作者:月光轩辕-  
这篇文章主要介绍了 java HashMap,TreeMap与LinkedHashMap的详解的相关资料,这里提供实例代码,帮助大家学习理解 这部分的内容,需要的朋友可以参考下

 java HashMap,TreeMap与LinkedHashMap的详解

今天上午面试的时候 问到了Java,Map相关的事情,我记错了HashMap和TreeMap相关的内容,回来赶紧尝试了几个demo理解下

package Map; 
 
import java.util.*; 
 
public class HashMaps { 
  public static void main(String[] args) { 
    Map map = new HashMap(); 
    map.put("a", "aaa"); 
    map.put("b", "bbb"); 
    map.put("c", "ccc"); 
    map.put("d", "ddd"); 
 
    Iterator iterator = map.keySet().iterator(); 
    while (iterator.hasNext()) { 
      Object key = iterator.next(); 
      System.out.println("map.get(key) is :" + map.get(key)); 
    } 
 
    Hashtable tab = new Hashtable(); 
    tab.put("a", "aaa"); 
    tab.put("b", "bbb"); 
    tab.put("c", "ccc"); 
    tab.put("d", "ddd"); 
    Iterator iterator_1 = tab.keySet().iterator(); 
    while (iterator_1.hasNext()) { 
      Object key = iterator_1.next(); 
      System.out.println("tab.get(key) is :" + tab.get(key)); 
    } 
 
    TreeMap tmp = new TreeMap(); 
    tmp.put("a", "aaa"); 
    tmp.put("b", "bbb"); 
    tmp.put("c", "ccc"); 
    tmp.put("d", "ddd"); 
    tmp.put("a", "aba"); 
    Iterator iterator_2 = tmp.keySet().iterator(); 
    while (iterator_2.hasNext()) { 
      Object key = iterator_2.next(); 
      System.out.println("tmp.get(key) is :" + tmp.get(key)); 
    } 
     
     
    LinkedHashMap<String ,Integer> linkedHashMap = new LinkedHashMap<String,Integer>(); 
    linkedHashMap.put("dasdsa", 1); 
    linkedHashMap.put("gdsf",2); 
    linkedHashMap.put("texvdfd", 3); 
    linkedHashMap.put("bdada", 4); 
     
    linkedHashMap.put("gdsf",3); 
    for(String temp : linkedHashMap.keySet()){ 
      System.out.println(temp); 
    } 
     
  } 
 
} 

Map不同于 List, 底层使用 键值对的形式存储数据 Map.Entry是内部的一个子条目,Map的不同实现 对键值对的索引方案不同
HashMap 本身是用hash函数对键值做索引   我们不能确定最后键值的顺序

      但是存在一个有趣的现象 就是在以Integer作为键值对的时候,当位数为1位时   键值是按照从小到大排的,位数上升到两位的时候 就可能存在问题

TreeMap  内部存在着一个平衡树来存储着键值索引,TreeMap 把键值按照比较函数排序,我推测内部是可能存在着一个AVLtree

LinkedHashMap   这个存在着一个特性是,键值对是按照插入顺序排序的,如果存在着重复插入,以首次插入的顺序来记,网上的一种说法是该结构内部存在着2重hash

   一个解决顺序问题,一个解决存储问题,正确性待确认

HashMap和TreeMap  是最常用的两种Map结构,  一般来说HashMap的效率比较高,也最为常见,如果我们需要键值有序的话,我们才会用到TreeMap

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Java中类加载过程全面解析

    Java中类加载过程全面解析

    这篇文章主要介绍了Java中类加载过程全面解析,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot整合redis中的JSON序列化文件夹操作小结

    SpringBoot整合redis中的JSON序列化文件夹操作小结

    在我们日常的项目开发中,使用redis作为缓存,来提高系统访问速度和缓解系统压力,在使用中遇到几个问题,本文给大家详细总结下,对SpringBoot整合redis JSON序列化相关知识感兴趣的朋友一起看看吧
    2022-02-02
  • IDEA在一个项目空间下管理多个项目的操作方法

    IDEA在一个项目空间下管理多个项目的操作方法

    这篇文章主要介绍了IDEA如何在一个项目空间下管理多个项目,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Spring中的@ExceptionHandler注解统一异常处理详解

    Spring中的@ExceptionHandler注解统一异常处理详解

    这篇文章主要介绍了Spring中的@ExceptionHandler注解统一异常处理详解,当我们使用这个@ExceptionHandler注解时,定义一个异常的处理方法,加上@ExceptionHandler注解,这个方法就会处理类中其他方法抛出的异常,需要的朋友可以参考下
    2024-01-01
  • 新手初学Java面向对象

    新手初学Java面向对象

    这篇文章主要介绍了Java语言面向对象编程思想之类与对象实例详解,还是十分不错的,这里给大家分享下,需要的朋友可以参考,希望能帮到你
    2021-07-07
  • 关于Spring配置文件加载方式变化引发的异常详解

    关于Spring配置文件加载方式变化引发的异常详解

    这篇文章主要给大家介绍了关于Spring配置文件加载方式变化引发的异常的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • spring学习JdbcTemplate数据库事务管理

    spring学习JdbcTemplate数据库事务管理

    这篇文章主要为大家介绍了spring学习JdbcTemplate数据库事务管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • mybatis-plus IdWorker生成的Id和返回给前台的不一致的解决

    mybatis-plus IdWorker生成的Id和返回给前台的不一致的解决

    这篇文章主要介绍了mybatis-plus IdWorker生成的Id和返回给前台的不一致的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • feign开启日志Logger.Level feignLoggerLevel()中Level爆红的解决

    feign开启日志Logger.Level feignLoggerLevel()中Level爆红的解决

    这篇文章主要介绍了feign开启日志Logger.Level feignLoggerLevel()中Level爆红的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • json如何解析混合数组对象到实体类的list集合里去

    json如何解析混合数组对象到实体类的list集合里去

    这篇文章主要介绍了json解析混合数组对象到实体类的list集合里去的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论