[b][/b]package com.demo.map;
import java.io.Serializable;
import java.text.CollationKey;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
/**
* @author cgy
* 本类是用来操作HashMap、linkedHashMap、TreeMap的
* 理解他们之间的差异。
* */
@SuppressWarnings({"serial","unchecked"})
public class OperateMap implements Serializable {
public static String name ;
public static Map<String, String> map ;
public static void main(String[] arg0){
operateHashMap();
operateHashMapSynchronized();
operateLinkedHashMap();
operateHashMapSynchronized();
operateTreeMap();
operateTreeMapOrder();
}
/*********************HashMap(不同步,输出元素是随机的,没有顺序)**************************************/
/**
* 操作HashMap 线程不同步是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有
* 很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;
* 但是它输出数据是随机的,没有顺序。
* */
public static void operateHashMap(){
map = new HashMap<String, String>();
map.put("name10", "吴飞1") ;
map.put("name11", "曹雄2");
map.put("name12", "王晓明3");
printOutValue(map) ;
}
/**
* 操作HashMap线程同步
* HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;
* 可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法
* 使HashMap具有同步的能力。
* */
public static void operateHashMapSynchronized(){
map = Collections.synchronizedMap(new HashMap<String, String>()) ;
map.put("name13", "吴飞1") ;
map.put("name14", "曹雄2");
map.put("name15", "王晓明3");
printOutValue(map);
}
/*********************LinkedHashMap(不同步,输出元素有顺序)**************************************/
/**
* 操作HashMap 线程不同步
* LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,
* LinkedHashMap支持2中排序一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3 M4,
* 使用M3后为 M1 M2 M4 M3了,LinkedHashMap输出时其元素是有顺序的,
* */
public static void operateLinkedHashMap(){
map = new LinkedHashMap<String, String>();
map.put("name20", "吴飞1") ;
map.put("name21", "曹雄2");
map.put("name22", "王晓明3");
printOutValue(map) ; //输出数据是有顺序的
}
/**
* 操作HashMap线程同步
* 如果Map映射比较复杂而又要求高效率的话,最好使用LinkedHashMap,
* 但是多线程访问的话可能会造成不同步,所以要用Collections.synchronizedMap
* 来包装一下,从而实现同步
* */
public static void operateLinkedHashMapSynchronized(){
map = Collections.synchronizedMap(new LinkedHashMap<String, String>()) ;
map.put("name23", "吴飞1") ;
map.put("name24", "曹雄2");
map.put("name25", "王晓明3");
printOutValue(map);
}
/*********************TreeMap(不仅可以保持顺序,而且可以用于排序)**************************************/
public static void operateTreeMap(){
map = Collections.synchronizedMap(new TreeMap<String, String>()) ;
map.put("name33", "吴飞1") ;
map.put("name34", "曹雄2");
map.put("name35", "王晓明3");
printOutValue(map);
}
public static void operateTreeMapOrder(){
map = new TreeMap<String, String>(new Comparator<Object>(){
/**
* Collator 类执行区分语言环境的 String 比较。使用此类可为自然语言文本构建搜索和排序例程。
* Collator 是一个抽象基类,如果正好比较 String 一次,则 compare 方法可提供最佳性能。
* 但在对 String 列表排序时,通常需要对每个 String 进行多次比较。
* 在这种情况下,CollationKey 可提供更好的性能。CollationKey 类将一个 String 转换成一系列可与其他 CollationKey 进行按位比较的位。
* CollationKey 是由 Collator 对象为给定的 String 所创建的。
* 不能直接创建 CollationKey。而是通过调用 Collator.getCollationKey 来生成。
* 只能比较同一个 Collator 对象生成的 CollationKey。 下面创建Collator对象
* */
Collator collator = Collator.getInstance() ;
public int compare(Object o1, Object o2) {
//collator.compare(o1, o2); //如果正好比较 String 一次,则 compare 方法可提供最佳性能
/**
* CollationKey 表示遵守特定 Collator 对象规则的 String。
* 比较两个 CollationKey 将返回它们所表示的 String 的相对顺序。
* 使用 CollationKey 来比较 String 通常比使用 Collator.compare 更快。
* 因此,当必须多次比较 String 时(例如,对一个 String 列表进行排序),
* 使用 CollationKey 会更高效。
* */
CollationKey key1 = collator.getCollationKey(o1.toString());
CollationKey key2 = collator.getCollationKey(o2.toString());
return key1.compareTo(key2);
}});
map.put("name30", "曹雄1") ;
map.put("name31", "曹雄2");
map.put("name32", "王晓明3");
printOutValue(map);
}
/**
* 打印值
* */
private static void printOutValue(Map<String, String> map) {
for (Iterator<String> iterator=map.values().iterator();iterator.hasNext();) {
name = iterator.next() ;
System.out.println(name);
}
System.out.println(""); //换行
}
}
[size=x-large][/size]
分享到:
相关推荐
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
主要介绍了 java HashMap,TreeMap与LinkedHashMap的详解的相关资料,这里提供实例代码,帮助大家学习理解 这部分的内容,需要的朋友可以参考下
Map,HashMap,TreeMap的使用 很详细额,值得看看
HashMap,HashTable,LinkedHashMap,TreeMap的区别
比较Java原生的 3种Map的效率。 1. TreeMap 2. HashMap 3. ConcurrentSkipListMap 本测试查找方法使用Map的get方法,循环、离散获取。... SkipListMap的范围查询效率比HashMap和TreeMap效率都要高。
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value
第9讲 对比Hashtable、HashMap、TreeMap有什么不同?1
主要介绍了HashMap vs TreeMap vs Hashtable vs LinkedHashMap的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
主要介绍了在Java中如何决定使用 HashMap 还是 TreeMap,很多朋友对这样的问题很迷茫,下面小编给大家带来一篇文章帮助大家了解,需要的朋友可以参考下
主要介绍了Java集合之HashMap用法,结合实例形式分析了java map集合中HashMap定义、遍历等相关操作技巧,需要的朋友可以参考下
JDK源码阅读笔记 ...LinkedHashMap TreeMap ConcurrentHashMap ConcurrentLinkedQueue ThreadPool ThreadLocal Reflection ScheduledThreadPool AsynchronousFileChannel BufferedInputStream Enum
集合框架包含collection和map的子类。其中collection包含list、set和queue。map包括hashmap、hashtable和treemap
treemap treeset hashset hashmap 简要介绍
java集合在日常开发中经常用到,对基础的掌握尤其重要,其中List,Set,Map的作用以及使用的场景和分类描述,其中Arraylist 与 LinkedList 区别,HashSet与TreeSet与LinkedHashSet对⽐,LinkedHashMap和HashMap,...
ArrayList集合与HashMap的扩容原来.docx
2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、遍历Map.values():它是Map中value的集合,我们可以直接通过这个集合遍历 Map中的值,却不能读取key。
hashMap基本工作原理,图解分析,基础Map集合
这个文档“ HashMap详解(通俗易懂)”很好的阐述了hashmap的底层数据结构示意,希望对学习java的人有帮助
java集合类HashMap总结共7页.pdf.zip