HashMap,LinkedHashMap,TreeMap都属于Map。
Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
HashMap 是一个最常用的Map,它根据键的 HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。
LinkedHashMap LinkedHashMap也是一个HashMap,但是内部维持了一个双向链表,可以保持顺序
TreeMap 不仅可以保持顺序,而且可以用于排序。
LinkedHashMap 是比 HashMap 多了一个链表的结构。与 HashMap 相比 LinkedHashMap 维护的是一个具有
双重链表的HashMap,LinkedHashMap 支持两种排序,一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 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 的综合使用例子,和简单的性能对比。
package com.chen.java;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class TestMap {
public static void main(String[] args) {
Map<Integer, Integer> map = Collections.synchronizedMap(new HashMap<Integer, Integer>());
Random ran = new Random();
long l1 = System.currentTimeMillis();
long l2 = 0;
for (;;) {
map.put(ran.nextInt(1000000), ran.nextInt(1000000));
l2 = System.currentTimeMillis();
if ((l2 - l1) > 2000) {
break;
}
}
long t1 = System.currentTimeMillis();
testHashMap(map);
long t2 = System.currentTimeMillis();
System.out.println("HashMap cost :" + (t2 - t1) + " ms");
testLinkedHashMap(map);
t1 = System.currentTimeMillis();
System.out.println("LinkedHashMap cost :" + (t1 - t2) + " ms");
testTreeMap(map);
t2 = System.currentTimeMillis();
System.out.println("TreeMap cost :" + (t2 - t1) + " ms");
}
public static void testHashMap(Map map) {
Map<Integer, Integer> mymap = new HashMap<Integer, Integer>();
mymap.putAll(map);
for (Iterator it = mymap.values().iterator(); it.hasNext();) {
it.next();
// System.out.println(it.next());
}
}
public static void testLinkedHashMap(Map map) {
Map<Integer, Integer> mymap = new LinkedHashMap<Integer, Integer>();
mymap.putAll(map);
for (Iterator it = mymap.values().iterator(); it.hasNext();) {
it.next();
// System.out.println(it.next());
}
}
public static void testTreeMap(Map map) {
Map<Integer, Integer> mymap = new TreeMap<Integer, Integer>(/*new Comparator<Object>() {
Collator c = Collator.getInstance();
@Override
public int compare(Object o1, Object o2) {
CollationKey key1 = c.getCollationKey(o1.toString());
CollationKey key2 = c.getCollationKey(o2.toString());
return key1.compareTo(key2);
}
}*/);
mymap.putAll(map);
for (Iterator it = mymap.keySet().iterator(); it.hasNext();) {
it.next();
//System.out.println(it.next());
}
}
}
其中一次运行结果如下:
HashMap cost :781 ms
LinkedHashMap cost :219 ms
TreeMap cost :547 ms
分享到:
相关推荐
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
HashMap,HashTable,LinkedHashMap,TreeMap的区别
对基础的掌握尤其重要,其中List,Set,Map的作用以及使用的场景和分类描述,其中Arraylist 与 LinkedList 区别,HashSet与TreeSet与LinkedHashSet对⽐,LinkedHashMap和HashMap,TreeMap对⽐,HashMap 和 Hashtable...
java中map简单实例,包含插入,读出,遍历代码。内含map使用实例及HashMap,LinkedHashMap,TreeMap的区别
Map接口的实现类可以根据其内部数据结构的不同,分为几种类型,例如HashMap、TreeMap和LinkedHashMap等。不同的实现类具有不同的特点和性能特征,应该根据实际需求来选择合适的实现类。 Map接口中常用的方法 1. put...
// 常用的map接口的实现类有HashMap,LinkedHashMap和TreeMap // HashMap不保证集合中元素的顺序, // LinkedHashMap按插入顺序排序 // TreeMap按自己的意愿进行排序,默认按key值升序排序。 另包含一篇网文:在java...
Java容器讲解PPT,Collection Map(HashMap TreeMap LinkedHashMap) List (ArrayList LinkedList Vector) Set (HashSet TreeSet LinkedHashSet)
Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。 TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射...
Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。这篇文章主要介绍了Java Map 按照Value排序的实现方法,需要的朋友可以参考下
HashMap LinkedHashMap TreeMap WeakHashMap Hashtable Collection 集合体系详解 Set 接口 AbstractSet 抽象类SortedSet 接口HashSet LinkedHashSet TreeSet List 接口 AbstractList 和 AbstractSequentialList ...
Map虽然也叫集合,但是它却不是Collection的子接口。它的底层结构是链表散列,也...HashMap map = new HashMap<>(); map.put("name", "大妖怪"); map.put("age", "100"); 复制代码 查询元素:get(key) HashMap m
在Java中,容器(Container)指的是...Map用于存储键值对(Key-Value Pair)的数据,它的实现类有HashMap、TreeMap、LinkedHashMap等。Map中的键是唯一的,每个键对应一个值。通过键可以快速查找对应的值,这使得Map
LinkedHashMap ConcurrentHashMap TreeMap Hashtable Set源码系列 HashSet LinkedHashSet TreeSet HashSet Concurrent源码系列 待完善 JVM(Java虚拟机) 类加载 垃圾回收算法 JavaConcurrent(Java并发系列) 【Java...
Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap, TreeMap这一类的。以下简单模拟一个数据结构的连环炮。 比如,面试官先问你HashMap是不是有序的? 你肯定回答说,不是有序的。那面试官就会...
GoDS(Go数据结构) Go中各种数据结构和算法的实现。 数据结构 货柜 所有数据结构都通过以下方法实现容器接口: type Container interface { Empty () bool Size () int Clear () Values () [] interface {} ...
该文档主要详细总结了Java集合的相关知识,包括Collection和Map接口、Collection接口的子接口List和Set接口以及具体的实现类、存储原理等;Map接口的子接口HashMap、LinkedHashMap、TreeMap、Properties等
java集合框架 3.6. LinkedHashSet类 4. Map接口 4.1. Map.Entry接口 ...4.4. HashMap类和TreeMap类 4.4.1. HashMap类 4.4.2. TreeMap类 4.5. LinkedHashMap类 4.6. WeakHashMap类 4.6. IdentityHashMap类
HashMap有什么特点? ConcurrentHashMap是怎么分段分组的? ConcurrentHashMap是怎么分段分组的? 介绍LinkedHashMap的底层原理 请介绍TreeMap的底层原理 Map和Set有什么区别 ArrayList和LinkedList有什么区别 有...
- HashMap - LinkedHashMap - TreeMap - WeakHashMap - Hashtable - Collection 集合体系详解 - Set 接口 - AbstractSet 抽象类 - SortedSet 接口 - HashSet - LinkedHashSet - TreeSet - List 接口 -...
HashMap (done) Hashtable (done) Properties (done) LinkedHashMap (done) IdentityHashMap (done) TreeMap (done) WeakHashMap (done) 并发集合 ArrayBlockingQueue(done) LinkedBlockingDeque (done) ...