`

在用集合存储数据时,什么情况下使用HashMap(),什么情况下使用LinkedHashMap()

    博客分类:
  • java
 
阅读更多
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时,得到的记录是排过序的。

 

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中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    - **性能**:尽管`TreeMap`提供排序功能,但它的时间复杂度通常是O(log n),因此在某些情况下可能比`HashMap`和`LinkedHashMap`慢。 #### 4. HashTable `HashTable`是一种古老的`Map`实现,它的设计是为了确保线程...

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    在 Java 中,Map 是一个非常重要的集合类,用于存储键值对。其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和用途。本文将对这四种 Map 实现类进行比较和分析。 ...

    hashmap 集合

    在Java编程中,HashMap集合是开发者经常使用的数据结构之一,尤其在处理大量数据时,它的高效性和灵活性使得它成为首选。HashMap是Java集合框架的一部分,位于`java.util`包下,实现了Map接口,用于存储键值对(key-...

    LinkedHashmap的使用

    相比之下,LinkedHashMap是HashMap的一个子类,它添加了一个额外的数据结构,即双向链表。这使得LinkedHashMap在保持HashMap高效性的同时,还保留了元素的插入顺序或者访问顺序(取决于构造函数的参数)。因此,迭代...

    Java集合系列(LinkedHashMap+LinkedList+ArrayList)

    LinkedHashMap 的实现方式是使用数组和双向链表来存储数据,在每个节点中增加了 before 和 after 变量来维护顺序。 LinkedHashMap 和 HashMap 的主要区别在于,LinkedHashMap 可以维护元素的顺序,而 HashMap 无法...

    数据储存结构集合

    根据提供的信息,我们可以深入探讨几种主要的数据存储结构及其在集合体系中的应用,特别是线性表、数组、链表、哈希表以及它们在集合(如`Collection`接口的不同实现)中的具体体现。 ### 线性表 线性表是一种常见...

    HASHMAP排序功能描述

    HashMap是Java编程语言中常用的集合类之一,它属于哈希表数据结构,提供key-value的存储方式,并且具有快速查询的特性。然而,HashMap本身并不保证元素的顺序,特别是当涉及到遍历或输出HashMap的内容时,顺序可能会...

    ArrayList,HashMap

    ArrayList和HashMap是Java编程语言中两种非常重要的集合类,它们都是Java集合框架(Collections Framework)的一部分,用于存储和管理对象。ArrayList属于List接口的实现,而HashMap则实现了Map接口。两者在用途、...

    有序的集合

    在上面的代码中,我们使用了LinkedHashMap来存储有序的数据。首先,我们创建了一个LinkedHashMap对象,并将多个键值对加入其中。然后,我们使用entrySet()方法获取Map中的所有键值对,并将其转换为List。最后,我们...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Map接口用于保存具有key-value映射关系的数据,常见的Map实现包括HashMap、TreeMap、HashTable和LinkedHashMap等。Queue是Java提供的队列实现。 本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的...

    HashMap遍历

    通过对比可以发现,`entrySet()`遍历`HashMap`的方法在大多数情况下都比`keySet()`方法更加高效,尤其是当涉及到大量数据处理时。因此,在实际开发中,推荐优先使用`entrySet()`来进行遍历,以提高程序的执行效率。 ...

    Java集合框架常见面试题

    根据集合的特点来选用,例如需要根据键值获取到元素值时就选用 Map 接口下的集合,需要排序时选择 TreeMap,不需要排序时就选择 HashMap,需要保证线程安全就选用 ConcurrentHashMap。 为什么使用集合? 使用集合...

    java课件-HashMap

    1. 非线程安全:HashMap不是线程安全的,这意味着在多线程环境下,不推荐在未进行同步控制的情况下直接使用HashMap。如果需要线程安全的数据结构,可以考虑使用ConcurrentHashMap。 2. 可变容量:HashMap的容量可以...

    java集合类HashMap总结共7页.pdf.zip

    Java集合框架是Java编程语言中的一个核心特性,它提供了一种高效、灵活的方式来存储和操作数据。HashMap作为其中的一员,是基于哈希表实现的,提供了键值对(key-value pair)的存储方式,具有快速查找和插入的特点...

    对java基础集合部分(List、HashMap、HashSet、ArrayList等)底层源码的分析与总结

    Java集合框架是Java编程中非常重要的部分,它提供了一种高效、灵活的数据组织方式。本文主要探讨了几个关键的集合接口和实现类的底层源码,包括List、HashMap、HashSet等,以及它们的基本操作。 首先,Collection...

    LinkedHashMap

    - **线程非安全**:与`HashMap`一样,`LinkedHashMap`不是线程安全的,因此在多线程环境下,需要使用`Collections.synchronizedMap()`来同步,或者使用`ConcurrentHashMap`代替。 - **空间开销**:相比于`HashMap`...

    Java集合框架详解

    在JDK1.8版本中,还增加了红黑树的部分,以提高在大量数据和高冲突情况下的性能。 - Node[]table:HashMap的存储结构中最核心的字段,它是一个Node类型的数组。Node是HashMap的内部类,实现了Map.Entry接口,表示一...

    hashMap1.8源码

    HashMap是Java编程语言中最常用的集合类之一,它提供了一种基于键值对(key-value pair)的数据存储方式,具有高效查找、插入和删除操作。在Java 8中,HashMap的实现有了很多改进,以提高性能和空间利用率。下面我们...

    Map,HashMap,TreeMap的使用

    Java 中的 Map、HashMap、TreeMap 使用详解 Map 是 Java 集合框架中的一个接口,用于存储键值对,...在上面的代码中,我们使用了 HashMap、TreeMap、LinkedHashMap 三种 Map 实现类,每种实现类都有其特点和使用场景。

Global site tag (gtag.js) - Google Analytics