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为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.

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

Hashmap

   是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null(如果建是null存在数组的第一个位置);允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

  默认初始化的时候是16个数组的大小,而且增长是成倍的增长。

    /**
* Constructs an empty <tt>HashMap</tt> with the default initial capacity
* (16) and the default load factor (0.75).
*/
public HashMap() {
this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);
}
    void addEntry(int hash, K key, V value, int bucketIndex) {
if ((size >= threshold) && (null != table[bucketIndex])) {
resize(2 * table.length);
hash = (null != key) ? hash(key) : 0;
bucketIndex = indexFor(hash, table.length);
} createEntry(hash, key, value, bucketIndex);
}

Hashtable

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

  默认初始化的时候是11个数组的大小,而且增长是old*2+1

    public Hashtable() {
this(11, 0.75f);
}

LinkedHashMap

   是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造 时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

TreeMap

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

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

【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】

最新文章

  1. 前端开发:css技巧,如何设置select、radio 、 checkbox 、file这些不可直接设置的样式 。
  2. MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
  3. dll 和 lib--初级
  4. CSS绝对定位的应用
  5. 清除WebLogic8.1缓存
  6. nodeJS中npm常见的命令
  7. hibernate核心接口,和扩展接口。回顾笔记,以前没记,现在补上,纯手工敲的。
  8. linux 标准 GPIO 操作
  9. js前台获取list的demo
  10. Hadoop 它们的定义Writable NullpointerException
  11. windows service and process 的关系
  12. 《剑指Offer》算法题——替换空格
  13. 西邮linux兴趣小组2014纳新免试题(三)
  14. 全志A33移植LCD驱动(ILI9806E)
  15. Envoy 源码分析--event
  16. 采用NoteExpress参考文献导入和导出
  17. [20180819]关于父子游标问题(11g).txt
  18. day10.函数升级
  19. The current state of generics in Delphi( 转载)
  20. mac中启动jmeter方法

热门文章

  1. 利用ShardingSphere-JDBC实现分库分表--配置中心的实现
  2. Android进阶之路(2)-详解MVP
  3. 深度解密Go语言之 scheduler
  4. dataGrip连接数据库失败[08001]的一种可能原因
  5. C#开发BIMFACE系列12 服务端API之文件转换
  6. 五月月赛 寻宝 exkmp + 主席树
  7. 工程点点app爬虫和sign算法破解
  8. android日志搜集原理及方案比较
  9. 201871010134-周英杰《面向对象程序设计(java)》第一周学习总结
  10. 自定义Hive UDAF 实现相邻去重