c++中map和unorderedmap与java中hashmap和linkedhashmap

LinkedHashMap 存储结构和 HashMap 相同,依然是数组+链表+红黑树
LinkedHashMap 额外持有一个双向链表,维护插入节点的顺序
最终的数据结构如下图
    实际的元素存储与HashMap一致,依然是数组+链表+红黑树的形式
    区别在于:
    除了维护数组+链表的结构之外,还根据插入Map先后顺序维护了一个双向链表的头尾head,tail
    Node基本结构,相比较HashMap而言,还增加了 before,after 两个分别指向双向链表中前后节点的属性
    即下图中的双向链表中的节点,其实值依然是下面的数组+链表结构中的元素

图片.png

遍历map时要求按照插入顺序输出则选择LinkedHashMap,当然会更占内存一些否则使用hashmap就可以。
因为LinkedHashMap中有双向链表保存节点顺序所以移动一个节点到链表头很方便,删除一个节点也很
方便,可以使用它来实现LRU算法。

c++中map底层直接是一颗红黑树所以输入进map的key会自动排序,挨个遍历key的话也是按照排序后的key依次遍历,查找key效率就是红黑树的查找效率。
unorderedmap底层先是哈希表,所以key值无序,所以理想情况下查找效率是O(1), 类似于java中hashmap的实现。
map和unorderedmap想实现按照插入key的顺序来遍历可以自己使用vector记录key插入顺序,然后按照vector中key值依次遍历。
原文链接:https://blog.csdn.net/liuyueyi25/article/details/78511278

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • STL部分 1.STL为什么广泛被使用 C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vec...
    杰伦哎呦哎呦阅读 9,769评论 0 9
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 5,958评论 0 13
  • java基础 集合承继包含图 Collection vs Collections 首先,"Collection" ...
    onlyHalfSoul阅读 5,150评论 0 5
  • 原文地址 Java集合 Java集合框架:是一种工具类,就像是一个容器可以存储任意数量的具有共同属性的对象。 Ja...
    gyl_coder阅读 4,533评论 0 8
  • 简介 1.所有的集合类都位于java.util包下,Java的结合主要由两个接口类派生出来,分别是Collecti...
    yunqing_71阅读 7,263评论 0 2