由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下。

import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.Map;public class TestLinkedHashMap {public static void main(String args[]){System.out.println("*************************LinkedHashMap*************");Map<Integer,String> map = new LinkedHashMap<Integer,String>();map.put(6, "apple");map.put(3, "banana");map.put(2,"pear");for (Iterator it =  map.keySet().iterator();it.hasNext();){Object key = it.next();System.out.println( key+"="+ map.get(key));}System.out.println("*************************HashMap*************");Map<Integer,String> map1 = new  HashMap<Integer,String>();map1.put(6, "apple");map1.put(3, "banana");map1.put(2,"pear");for (Iterator it =  map1.keySet().iterator();it.hasNext();){Object key = it.next();System.out.println( key+"="+ map1.get(key));}}} 

运行结果如下:

********************LinkedHashMap********
6=apple
3=banana
2=pear
********************HashMap*********************
2=pear
6=apple
3=banana

分析:LinkedHashmap 的特点是put进去的对象位置未发生变化,而HashMap会发生变化.

再普及下:

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。

HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

LinkedHashMap和HashMap的比较使用 详解相关推荐

  1. Java HashMap的实现原理详解

    HashMap是Java Map类型的集合类中最常使用的,本文基于Java1.8,对于HashMap的实现原理做一下详细讲解. (Java1.8源码:http://docs.oracle.com/ja ...

  2. java源码系列:HashMap底层存储原理详解——4、技术本质-原理过程-算法-取模具体解决什么问题

    目录 简介 取模具体解决什么问题? 通过数组特性,推导ascii码计算出来的下标值,创建数组非常占用空间 取模,可保证下标,在HashMap默认创建下标之内 简介 上一篇文章,我们讲到 哈希算法.哈希 ...

  3. hashmap remove 没释放内存_java从零开始手写 redis(13)HashMap 源码原理详解

    为什么学习 HashMap 源码? 作为一名 java 开发,基本上最常用的数据结构就是 HashMap 和 List,jdk 的 HashMap 设计还是非常值得深入学习的. 无论是在面试还是工作中 ...

  4. hashmap底层源码详解

    这里聊一下HashMap: HashMap底层数据结构: HashMap1.7之前数据结构是数组+链表 HashMap1.8之后数据结构加了红黑树(是用来处理hash冲突的) HashMap1.7之前 ...

  5. HashMap 底层源码详解(jdk1.8)

    目录 HashMap概述 Map家族 哈希表 哈希表扩容 构造方法 put()方法(第一次插入) resize()方法 让数组容量为2次幂的原因 get()方法 get()方法实现原理 put()方法 ...

  6. HashMap类Compute方法详解及样例

    hashMap简介 hashMap是基于Map的实现,并且允许null value和null key,它不保证存储的数据的顺序.特别要注意的是hashMap不是同步的,要实现同步除了在外部实现同步外, ...

  7. HashMap的使用方法详解

    HashMap是一种十分常用的数据结构对象,可以保存键值对,下面将详细介绍HashMap的使用方法. 一.添加方法 put方法,可以单次向HashMap中添加一个键值对. 注意:添加到Map中的数据, ...

  8. 关于上上文hashmap的深入-hashmap产生死锁的详解

    一.HashMap 的底层实现 这个可以参考上一篇文章:HashMap 源码剖析,具体介绍了 HashMap 的底层实现: 数组:充当索引  链表:处理碰撞 简单地说一下: HashMap通常会用一个 ...

  9. java源码系列:HashMap底层存储原理详解——5、技术本质-原理过程-算法-取模会带来一个什么问题?什么是哈希冲突?为什么要用链表?

    目录 取模会带来一个什么问题? 演示什么是哈希冲突(哈希碰撞)? 为什么要用链表? 其他--布隆过滤器 取模会带来一个什么问题? 好,那同学们这样他能达到一个目的,但是呢,它也会带来的一个问题,那它会 ...

最新文章

  1. 2013 Multi-University Training Contest 5 部分解题报告
  2. 信息系统项目管理师-项目整体、收尾、变更管理考点笔记
  3. MySQL 笔记8 -- 存储过程和索引
  4. 漫谈Java IO之 Netty与NIO服务器
  5. 春节期间,我用责任链模式重构了业务代码
  6. MyBatis启动流程分析
  7. NUMA全称 Non-Uniform Memory Access,译为“非一致性内存访问”,积极NUMA内存策略
  8. 潭州课堂25班:Ph201805201 爬虫高级 第十二 课 Scrapy-redis分布 项目实战 (课堂笔记)...
  9. Linux命令(20)linux服务器之间复制文件和目录
  10. easyUI跨Tab操作datagrid
  11. android8.1 audio hal关键结构分析(二十五)
  12. 数据库事务的四大特性以及隔离级别
  13. vue2.0项目部署到服务器_阿里云服务器搭建及项目部署过程---小白篇
  14. 毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
  15. 菜鸟程序员成长之路(七)——2020年,你奋斗了吗?
  16. 成都拓嘉启远:拼多多推广如何自己添加关键词
  17. 硬核,这年头机器人都开始自学“倒车入库”了
  18. SECOND: Sparsely Embedded Convolutional Detection
  19. 2022年乡村医生考试模拟题及答案
  20. DHU Matlab Experiment【7】考试复盘

热门文章

  1. 普通高中计算机课程软件,普通高中信息技术课程标准(2017 年版)(4):选修课程...
  2. Linux Centos7安装chrome浏览器
  3. Android5.1修改以太网MAC地址(SElinux)【转】
  4. SQL Server中的小技巧(重复、替换、截取、去空格、去小数点后的位数)
  5. OpenStack(Kilo版本)基础架构学习笔记
  6. javascript中将整数添加千位符号
  7. 数据产品设计专题(4)- 程序化交易业务架构模型
  8. tvOS模拟器遥控的快捷键
  9. 苏宁V购 不为拯救 只求改变
  10. 巧妙设置Android来方便管理Linux和Windows