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

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

相关文章

  • 通过url方式传递中文乱码的解决方法

    通过url方式传递中文乱码的解决方法

    本篇文章主要是对通过url方式传递中文乱码的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • java堆排序原理与实现方法分析

    java堆排序原理与实现方法分析

    这篇文章主要介绍了java堆排序原理与实现方法,结合实例形式分析了java堆排序的相关原理、实现方法与操作注意事项,需要的朋友可以参考下
    2018-12-12
  • IntelliJ IDEA编译项目报错

    IntelliJ IDEA编译项目报错 "xxx包不存在" 或 "找不到符号"

    这篇文章主要介绍了IntelliJ IDEA编译项目报错 "xxx包不存在" 或 "找不到符号" ,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • java使用swt显示图片示例分享

    java使用swt显示图片示例分享

    这篇文章主要介绍了java使用swt显示图片示例,修改后就可变为图片浏览器,需要的朋友可以参考下
    2014-02-02
  • springboot整合mongodb使用详解

    springboot整合mongodb使用详解

    MongoDB是一个文档数据库(以 JSON 为数据模型),由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,本文就给大家介绍一下详细介绍一下springboot整合mongodb使用,需要的朋友可以参考下
    2023-07-07
  • Struts2截取字符串代码介绍

    Struts2截取字符串代码介绍

    这篇文章主要介绍了Struts2截取字符串代码介绍,介绍了基本的截取方法,以及截取带html标签字符串的方法,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot读取properties或者application.yml配置文件中的数据

    SpringBoot读取properties或者application.yml配置文件中的数据

    这篇文章主要介绍了SpringBoot读取properties或者application.yml配置文件中的数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • MyBatis使用resultMap如何解决列名和属性名不一致

    MyBatis使用resultMap如何解决列名和属性名不一致

    这篇文章主要介绍了MyBatis使用resultMap如何解决列名和属性名不一致的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java调用WebService接口的方法

    Java调用WebService接口的方法

    这篇文章主要介绍了Java调用WebService接口的方法,实例分析了有参方法Add的使用技巧,需要的朋友可以参考下
    2015-01-01
  • 基于JAVA中Jersey处理Http协议中的Multipart的详解

    基于JAVA中Jersey处理Http协议中的Multipart的详解

    之前在基于C#开发彩信用最原始的StringBuilder拼接字符串方式处理过Multipart。现在在做一个项目的时候,由于之前的技术路线都是使用Jersey处理Http这块,为了保持技术路线一致,研究了一下如何使用Jersey处理Http协议中的Multipart
    2013-05-05

最新评论