美文网首页
Java 数据结构之 Map 学习总结

Java 数据结构之 Map 学习总结

作者: 信徒_allen | 来源:发表于2017-11-01 14:13 被阅读0次

Java 数据结构之 Map 学习总结

今天总结学习一下键值映射关系Map。

先了解下Map

Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

Map是一个接口,实例化Map可以采用下面的方式:

HashMap//Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。

LinkedHashMap//类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。

TreeMap//底层是二叉树数据结构,线程不同步,可用于给Map集合中的键进行排序。

HashTable//HashMap是Hashtable的轻量级实现,非线程安全的实现他们都实现了map接口,主要区别是HashMap键值可以为空null,效率可以高于Hashtable。

ConcurrentHashMap//ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全的Map容器,比如Hashtable和Collections.synchronizedMap。

WeakHashMap//弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。

IdentifyHashMap//使用==代替equals()对“键”作比较的hash map

ArrayMap//ArrayMap是一个映射的数据结构,它设计上更多的是考虑内存的优化,内部是使用两个数组进行数据存储,一个数组记录key的hash值,另外一个数组记录Value值,它和SparseArray一样,也会对key使用二分法进行从小到大排序,在添加、删除、查找数据的时候都是先使用二分查找法得到相应的index,然后通过index来进行添加、查找、删除等操作,所以,应用场景和SparseArray的一样,如果在数据量比较大的情况下,那么它的性能将退化至少50%。

SparseArray//SparseArray比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转为Integer类型),它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据,从而节约内存空间。

Map的基本操作:

Object put(Object key, Object value): 向集合中加入元素

Object remove(Object key): 删除与KEY相关的元素

void putAll(Map t):  将来自特定映像的所有元素添加给该映像

void clear():从映像中删除所有映射

Map使用

这里以最常用的HashMap为例

添加数据

Map hashMap =newHashMap<>();

for(inti =0; i < maxCount; i++) {  

     hashMap.put(i,String.valueOf(i));

}

遍历entrySet方式

long start = System.currentTimeMillis();

for(Map.Entry entry : hashMap.entrySet()) {     

        Integer key=entry.getKey();

        String value=entry.getValue();     

        System.out.println("key: "+ key +"value: "+value); 

  }  

long end = System.currentTimeMillis(); 

  System.out.println("for-each方式 cost time : "+ (end - start));

entrySet迭代器遍历方式

long start1 = System.currentTimeMillis();

Iterator> entries = hashMap.entrySet().iterator();

while(entries.hasNext()) {

     Map.Entry entry = entries.next(); 

     Integer key=entry.getKey();

    Stringvalue=entry.getValue();   

    System.out.println("key: "+ key +"value: "+value);

     }

 long end1 = System.currentTimeMillis();

System.out.println("entrySet iterator迭代器 cost time : "+ (end1 - start1));

键找值遍历

long end1 = System.currentTimeMillis();

   System.out.println("iterator迭代器 cost time : "+ (end1 - start1));

    long start2 = System.currentTimeMillis();

   for (Integerkey: hashMap.keySet()) {   

    String value= hashMap.get(key);   

    System.out.println("key: "+key+"value: "+value);

}

   long end2 = System.currentTimeMillis();

  System.out.println("键找值遍历 cost time : "+ (end2 - start2));

keySet迭代器遍历

long start3 = System.currentTimeMillis();

Iterator iterator=hashMap.keySet().iterator();

while(iterator.hasNext()) {      

     Integerkey=iterator.next();     

     Stringvalue=hashMap.get(key);     

    System.out.println("key: "+key+"value: "+value);   

}

long end3 = System.currentTimeMillis();

System.out.println("keySet iterator迭代器 cost time : "+ (end3 - start3));

上述四种情况执行结果如下:

总结:

主要重新熟悉一下Map这种数据结构,以及更好的在以后的编程中选择更合适的方式来进行key-value存储。

相关文章

  • Java 数据结构之 Map 学习总结

    Java 数据结构之 Map 学习总结 今天总结学习一下键值映射关系Map。 先了解下Map Map 是一种把键对...

  • Java 数据结构之 Map 学习总结

    先了解下Map Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继...

  • Java数据结构总结之Map

    Java中使用Map接口描述映射结构,映射Map是一个独立的接口,描述的是键key-值value的对应关系,Map...

  • 10.7 关于Java的Map的九个问题

    通常,Map是由一组键值对组成的数据结构,每个键只能在Map中出现一次。 本文总结了如何使用Java Map及其实...

  • Go语言复合数据类型之map

    map概念 map是使用非常广泛且设计精妙的数据结构之一,在Java里面,我们使用最多的数据结构之一就是map。m...

  • 美团大牛剖析面试最常见问题之Java集合框架

    总览图 Java集合概览 说说List,Set,Map三者的区别? 集合框架底层数据结构总结 如何选用集合? 为什...

  • HashMap的几个灵魂拷问

    之前是写过一篇HashMap的原理文章的,比较基础 java基础之数据结构3(Map篇)[https://www...

  • Java数据结构之Map

    一、HashMap HashMap的数据结构 在java编程语言中,最基本的结构就是两种,一个是数组,另一个是模拟...

  • JavaSE基础知识学习-----数据结构

    Java数据结构 Java中的数据结构主要分为Collection和map两个接口(接口只提供抽象方法,并不提供实...

  • 复习

    数据结构 数据结构 集合常见数据结构:集合,链表,队列,数组,栈,映射java中:List列表,Set集合,Map...

网友评论

      本文标题:Java 数据结构之 Map 学习总结

      本文链接:https://www.haomeiwen.com/subject/dtxgpxtx.html