`
huiqinbo
  • 浏览: 344443 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LinkedHashMap 和 HashMap的区别[软件框架师 回钦波详解]

阅读更多
 

顾名思义LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持2中排序一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3 M4,使用M3后为 M1 M2 M4 M3了,LinkedHashMap输出时其元素是有顺序的,而HashMap输出时是随机的,如果Map映射比较复杂而又要求高效率的话,最好使用LinkedHashMap,但是多线程访问的话可能会造成不同步,所以要用Collections.synchronizedMap来包装一下,从而实现同步。其实现一般为:
    Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));

HashMap,LinkedHashMap,TreeMap都属于Map

Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。

HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。
LinkedHashMap LinkedHashMap也是一个HashMap,但是内部维持了一个双向链表,可以保持顺序
TreeMap 不仅可以保持顺序,而且可以用于排序
HashMap例子:
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("a3", "aa");
        map.put("a2", "bb");
        map.put("b1", "cc");
        for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
            String name = (String) iterator.next();
            System.out.println(name);
        }
    }

LinkedHashMap例子:

    public static void main(String[] args) {
        Map<String, String> map = new LinkedHashMap<String, String>();
        map.put("a3", "aa");
        map.put("a2", "bb");
        map.put("b1", "cc");
        for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
            String name = (String) iterator.next();
            System.out.println(name);
        }
    }

TreeMap例子:

    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>(new Comparator<Object>(){
            Collator collator = Collator.getInstance(); 
            public int compare(Object o1, Object o2) {
                CollationKey key1 = collator.getCollationKey(o1.toString());
                CollationKey key2 = collator.getCollationKey(o2.toString());
                return key1.compareTo(key2);
                //return collator.compare(o1, o2);
            }});
        map.put("a3", "aa");
        map.put("a2", "bb");
        map.put("b1", "cc");
        for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
            String name = (String) iterator.next();
            System.out.println(name);
        }
    }

 

运行这三个例子,体会一下它们之间的区别。

分享到:
评论

相关推荐

    Java集合框架源码分析之LinkedHashMap详解

    Java集合框架源码分析之LinkedHashMap详解 Java集合框架中的LinkedHashMap是HashMap的子类,它继承了HashMap的存储结构,但引入了一个双向链表的头结点,将所有put到LinkedHashMap的节点连接成一个双向循环链表,...

    Java集合框架详解

    主要实现类包括HashMap、Hashtable、LinkedHashMap和TreeMap。 1. HashMap:它利用键的hashCode值存储数据,根据键快速定位到值。由于使用了哈希表的存储方式,HashMap通常能够提供较快的读写性能。它的遍历顺序是...

    Map,HashMap,TreeMap的使用

    Java 中的 Map、HashMap、TreeMap 使用详解 Map 是 Java 集合框架中的一个接口,用于存储键值对,根据键可以获取值。Map 中的键不允许重复,但值可以重复。在 Java 中,HashMap、LinkedHashMap、TreeMap 都实现了 ...

    Java软件开发实战 Java基础与案例开发详解 11-5 Map接口 共12页.pdf

    ### Java软件开发实战:Map接口详解 #### 一、Map接口概述 Map接口是Java集合框架中的一个重要组成部分,用于存储键值对(key-value pairs)。Map接口与其他集合接口(如List和Set)不同之处在于,它允许每个键...

    jdk数组的基础上的集合使用及详解.docx

    Map接口的主要实现类有HashMap和LinkedHashMap。HashMap基于哈希表,元素存取顺序不确定,需要重写键的hashCode()和equals()方法;LinkedHashMap则在HashMap基础上增加了链表结构,保证了元素的插入顺序或访问顺序。...

    Java软件开发实战 Java基础与案例开发详解 11-1 Java集合框架和泛型机制 共6页.pdf

    ### Java集合框架和泛型机制 #### 11.1 Java集合框架概述 在Java中,集合框架(Collection Framework)是一套用于存储和操作对象集合的API。它为程序员提供了丰富的数据结构,使得数据管理更加高效和灵活。集合...

    Java集合详解

    在Java编程语言中,集合框架是一组用于存储和操作对象集合的接口和类。集合框架是Java API中一个非常重要的部分,因为它提供了一种统一的方式去操作不同类型的集合。集合框架通过提供高性能的通用数据结构和算法,极...

    java集合详解

    Java集合框架是Java编程语言中的一个核心特性,它为存储、管理和操作对象提供了一组统一的接口和类。本文将深入解析Java集合框架中的主要组件,包括Collection、List、Set和Map,帮助开发者更好地理解和使用这些工具...

    Java集合详解代码.zip

    本资料“Java集合详解代码.zip”涵盖了Java集合框架的主要组成部分,包括List、Set、Map以及Collections工具类,通过代码实现来帮助理解和掌握这些概念。 1. **List接口**:List是有序的集合,允许重复元素,支持...

    java类库详解(PDF版)

    ArrayList、LinkedList、HashSet、TreeSet、HashMap、LinkedHashMap等是常用的数据结构实现,它们各自具有不同的特性和性能表现,适用于不同的场景。 2. 输入/输出流:Java的I/O流系统支持处理数据的读写,包括文件...

    java集合框架图

    ### Java集合框架详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用...

    Java集合排序及java集合类详解(Collection、List、Map、Set)借鉴.pdf

    Java集合框架是Java编程语言中的核心部分,它提供了一种高效、灵活的数据组织和操作机制。本文将深入探讨集合框架的各个组成部分,包括Collection、List、Set和Map,以及它们的特点、常用方法和实现原理。 1. 集合...

    Java集合排序及java集合类详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。这个框架包括了Collection、List、Set和Map四大接口,以及它们的各种实现类。了解和掌握这些概念对于任何Java开发者来说...

    java集合详解与总结.pdf

    7. HashMap和Hashtable的主要区别在于线程安全性,HashMap是非同步的,性能较高,而Hashtable是线程安全的,但在多线程环境下使用时无需手动同步,但性能相对较低。 8. Java 1.5引入了泛型,使得集合在编译时就能...

    JAVA集合详解

    ### JAVA集合详解 #### 一、集合框架概述 ##### 1. 什么是JAVA集合框架? JAVA集合框架(Java Collection Framework)是一种为表示和操作集合所规定的标准体系结构,旨在为开发人员提供一种灵活且高效的机制来...

    Java集合框架总结

    - `LinkedHashMap`:保持了`HashMap`的高性能,并按插入顺序保存元素。 - `Hashtable`:线程安全的`HashMap`。 #### 四、抽象类 抽象类如`AbstractCollection`、`AbstractList`、`AbstractSet`和`AbstractMap`等...

    Java 72 道面试题及答案.docx

    "Java 集合框架详解" Java 集合框架是一种用于存储和管理对象的容器,主要有三种类型:Set(集)、List(列表)和 Map(映射)。集合的特点主要有两点:一是集合用于存储对象的容器,对象是用来封装数据的,对象多...

    Java集合框架全景:深入理解主要接口和类

    ### Java集合框架主要接口与类详解 #### 引言 Java集合框架作为Java语言的核心组成部分,在数据管理和操作方面发挥着至关重要的作用。该框架提供了一系列的接口和类,旨在为开发者提供灵活、高效且类型安全的数据...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    Java集合框架是Java编程语言中的核心部分,它提供了一种高效、灵活的数据存储和操作机制。本文将深入探讨集合框架的各个组成部分,包括Collection、List、Set和Map,以及它们的实现原理和排序方法。 1. **集合框架...

Global site tag (gtag.js) - Google Analytics