精华内容
下载资源
问答
  • Java HashMap LinkedHashMap 区别及原理 跳转

    Java HashMap LinkedHashMap 区别及原理

    跳转

    展开全文
  • Hashtable TreeMap HashMap LinkedHashMap区别 Hashtable 1、内部存储的键值对是无序的是按照哈希算法进行排序,与 HashMap 最大的区别就是线程安全。 2、键或者值不能为 null,为 null 就会抛出空指针异常。 3...

    Hashtable TreeMap HashMap LinkedHashMap的区别

    Hashtable TreeMap HashMap LinkedHashMap详解

    • Hashtable
    1、内部存储的键值对是无序的是按照哈希算法进行排序,与 HashMap 最大的区别就是线程安全。
    2、键或者值不能为 null,为 null 就会抛出空指针异常。
    3、HashTable 是 sychronize,多个线程访问时不需要自己为它的方法实现同步。
    4、Hashtable提供了对键的列举(Enumeration)
    • HashMap
    1、 是线程不安全的,HashMap 是一个接口,是 Map 的一个子接口,是将键映射到值得对象
    2、不允许键值重复,允许空键和空值;
    3、由于非线程安全,HashMap 的效率要较 HashTable 的效率高一些。
    4、HashMap 在被多个线程访问的时候需要自己为它的方法实现同步
    5、HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的
    
    • TreeMap
    基于红黑树 (red-black tree) 数据结构实现,按 key 排序,默认的排序方式是升序。
    
    • LinkedHashMap
    有序的 Map 集合实现类,相当于一个栈,先 put 进去的最后出来,先进后出。
    
    展开全文
  • HashMap LinkedHashMap TreeMap 的区别

    顾名思义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);
    }
    }

     

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

    展开全文
  • HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMapLinkedHashMap支持两种排序:一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3 M4,使用M3后为 M1 M2 M4 M3了。   ...

    LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持两种排序:一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3 M4,使用M3后为 M1 M2 M4 M3了。

     

    LinkedHashMap输出时其元素是有顺序的,而HashMap输出时是随机的,如果Map映射比较复杂而又要求高效率的话,最好使用LinkedHashMap,但是多线程访问的话可能会造成不同步,所以要用Collections.synchronizedMap来包装一下,从而实现同步。其实现一般为:

    Map<String Object> map = Collections.synchronizedMap(new LinkedHashMap(<String Object));

     

    HashMap,LinkedHashMap,TreeMap都属于Map:

     

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

     

    HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。

     

    LinkedHashMap也是一个HashMap,但是内部维持了一个双向链表,可以保持顺序。

     

    TreeMap 不仅可以保持顺序,而且可以用于排序 HashMap。

     

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

     

    LinkedHashMap 是HashMap的一个子类,在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

     

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

     

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

     

    List是一个接口,而ArrayList是一个类。 ArrayList继承并实现了List。List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

    为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 

    问题就在于List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 LinkedList或者Vector等等,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。

     

    举例说明三者区别如下所示:

    package com.map.test;
    
    import java.text.CollationKey;
    import java.text.Collator;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.TreeMap;
    
    public class MapTestDemo {
    	
    	public void hashMapTest () {
    		
    		Map<String, Object> map = new HashMap<String, Object>();
    		map.put("a3", "aa");
    		map.put("a2", "bb");
    		map.put("b1", "cc");
    		for (Iterator<Object> iterator = map.values().iterator(); iterator.hasNext();) {
    			Object name =  iterator.next();
    			System.out.println(name);
    		}
    		
    	}
    	
    	public void linkedHashMapTest () {
    		
    		Map<String, Object> map = new LinkedHashMap<String, Object>();
    		map.put("a3", "aa");
    		map.put("a2", "bb");
    		map.put("b1", "cc");
    		for (Iterator<Object> iterator = map.values().iterator(); iterator.hasNext();) {
    		Object name =  iterator.next();
    		System.out.println(name);
    		}
    		
    	}
    	
    	public void treeMapTest () {
    		
    		Map<String, Object> map = new TreeMap<String, Object> (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);
    			
    			}
    			
    		});
    		
    		map.put("a3", "aa");
    		map.put("a2", "bb");
    		map.put("b1", "cc");
    		for (Iterator<Object> iterator = map.values().iterator(); iterator.hasNext();) {
    			
    			Object name =  iterator.next();
    			System.out.println(name);
    			
    		}			
    		
    	}
    	
    	public static void main(String[] args) {
    		
    		MapTestDemo d = new MapTestDemo();
    		d.hashMapTest();
    		d.linkedHashMapTest();
    		d.treeMapTest();
    		
    	}
    	
    }
    

     

    运行结果如下所示:


     

    不同的遍历方式(输出Key及Value)如下所示:

    package com.map.test;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    public class mapTestExample {
    	
    	public static void main(String args[]) {
    	   System.out.println("*************************LinkedHashMap*************");
    	   Map<String,String> map = new LinkedHashMap<String,String>();
    	   map.put("first", "apple");
    	   map.put("second", "banana");
    	   map.put("third","pear");
    	   
    	   for (Iterator it =  map.keySet().iterator();it.hasNext();)
    	   {
    	    String key = (String) it.next();
    	    System.out.println( key+"="+ map.get(key));
    	   }
    	   
    	}
    
    }

     

    运行结果如下图所示:


     

    参考文章:

    http://hi.baidu.com/chssheng2007/item/220de1151b39275c2b3e22cb
    http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html

    http://wenwen.sogou.com/z/q472138423.htm

     

    展开全文
  • MAP 下边是 HashMap SortedMap ...LinkedHashMap 这个是怎么put 就怎么取 是有顺序的 是按你插入时候的顺序放的 Hashtable 废弃了 首先开发这个的人 没有遵循驼峰命名 再有就是效率低因为是线程同步的 H
  • hashmap linkedhashmap

    2010-11-27 09:13:39
    hashmap 链表数组 linkedhashmap 里面的内部类ENTRY还要保存上个ENTRY的引用
  • HashMapLinkedHashMap区别 参考:https://blog.csdn.net/a822631129/article/details/78520111 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable Li...
  • LRUCache HashMap LinkedHashMap内部实现原理
  • treemap 有自然顺序的排序 hashmap 完全无序 linkedhashmap 按照先后顺序
  • (1)Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null...
  • Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;...
  • java为数据结构中的映射定义了一个接口java.util.Map,四个实现类分别是:HashMap Hashtable LinkedHashMap TreeMap 。 Map的实现类,键不允许重复,键重复时值就会被覆盖;值允许重复。 HashMap: 1.最多允许一条键...
  • Java HashMap LinkedHashMap

    2015-04-19 21:53:18
    HashMap  void addEntry(int hash, K key, V value, int bucketIndex) {  if ((size >= threshold) && (null != table[bucketIndex])) {  resize(2 * table.length);  hash = (n
  • 1.有序的Map 集合 LinkedHashMap 在开发中,HashMap 集合是我们使用的, 但是它是无序的集合,有时用起来比较痛苦. 我们希望 存的顺序是什么,取的时候也是什么顺序. LinkHashMap 就可以满足我们的需求. HashMap //...
  • HashMap hashMap = new HashMap(); hashMap.put(11,"a"); hashMap.put(12,"c"); hashMap.put(13,"b"); hashMap.put(6,"d"); hashMap.put(100,"e"); hashMap.put
  • 它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 Hashmap 是一个最常用的Map,它根据键的HashCode值存储...
  • ArrayList、LinkedList、Vector的区别和实现原理 存储结构 ArrayList和Vector是按照顺序将元素存储(从下标为零开始),删除元素时,需要使部分元素位移,默认初始容量都是10 ArrayList和Vector是基于数组实现的,...
  • Hashtable LinkedHashMap 和TreeMap.  Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它...
  • HashMapLinkedHashMap区别 LinkedHashMap是继承于HashMap,是基于HashMap和双向链表来实现的。 HashMap无序;LinkedHashMap有序,可分为插入顺序和访问顺序两种。如果是访问顺序,那put和get操作已存在的Entry...
  • ArrayList:底层结构是一个数组,初始长度为10 容量不足时,扩展为原来的1.5倍也就是扩展为15 ArrayList底层是一个双向链表,好处是不用扩容,坏处是当你要寻找第...HashSet是没技术含量的问题:因为它是HashMap的一...
  • HashMap LinkedHashMap TreeMap什么时候用

    千次阅读 2013-04-03 12:10:26
    HashMap 是线程不安全的哈希表,如果需要同步用Collections.synchronizedMap(map); 键不能重复,值可以,可以存储null键值,取数据无顺序之分 LinkedHashMap:是一个维持双向链表,是一个有序的Map,怎么put的...
  • HashMap,LinkedHashMap,TreeMap都属于Map。  1.基本含义 Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。  HashMap 是一个最常用的Map,它根据键的 HashCode 值...
  • hashmap linkedhashmap hashset treemap arraylist linkedlist 这几种java collection一直在面试中或笔试中遇到。 谁能结合实际中的用例,谈谈你在项目中的应用,毕竟理论都要服务于实践,谢谢。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,226
精华内容 22,890
关键字:

hashmaplinkedhashmap区别