题目:使用hashmap 插入数据,怎么样依照插入数据的顺序输出数据

分析:

使用hashmap插入数据,数据的顺序会改变。能够写个小程序试试。

那怎么样依照插入的顺序输出呢?

方法一:

这是我第一时间想出来的办法: 维护一张表,存储数据插入的顺序,能够使用vector。可是假设删除数据呢。首先得在vector里面找到那个数据,再删除。而删除又要移动大量数据。性能效率非常低。

使用list,移动问题能够解决。可是查找数据的O(n)时间消耗。假设删除m次,那查找数据的性能就是0(n*m)。那整体性能也是 O(n2)。性能还是没法接受。

方法二:

能够在hashmap里面维护插入顺序的id, 在value建一个字段存储id值。再维护一张表vector。而且id相应vector里面的值。

插入的时候。id+=1, hashmap.insert,vector.push_back.

删除的时候。先hashmap.find(key), 得到value, 并从value中得到id,  通过id把相应vector值置为无效。

更新:删除+插入。

维护工作OK了,输出的时候直接输出vector里面的值就能够了, 无效的就continue。

算法复杂度为O(n)

方法三:

java里面有个容器LinkedHashMap, 它能实现依照插入的顺序输出结果。

它的原理也是维护一张表,但它是链表,而且hashmap中维护指向链表的指针,这样能够高速定位链表中的元素进行删除。

它的时间复杂度也是O(n), 空间上要比上面少些。

这就是我大致的想法。还有什么好办法没?

45. 腾讯面试题: 使用hashmap 插入数据,怎么样依照插入数据的顺序输出数据的更多相关文章

  1. 透过面试题掌握HashMap【持续更新中】

    本文主要是自己阅读了HashMap和ConcurrentHashMap源码及一些Java容器类相关的博客后,找了一些很多面经中涉及到的Java容器相关的面试题,自己全部手写的解答,也花了一些流程图,之 ...

  2. 找工作的你不容错过的45个PHP面试题附答案(下篇)

    找工作的你不容错过的45个PHP面试题附答案(上篇) Q28:你将如何使用PHP创建Singleton类? /** * Singleton class * */ final class UserFac ...

  3. 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

    腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?  这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面 ...

  4. 腾讯面试题:10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。

    腾讯面试题:10G 个整数,乱序排列,要求找出中位数.内存限制为 2G. 题目和基本思路都来源网上,本人加以整理. 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只 ...

  5. 算法题14 小Q歌单,牛客网,腾讯笔试题

    算法题14 小Q歌单,牛客网,腾讯笔试题 题目: 小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌 ...

  6. 算法题16 贪吃的小Q 牛客网 腾讯笔试题

    算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ...

  7. PHP程序员必须会的 45 个PHP 面试题

    Q1: == 和 === 之间有什么区别? 话题: PHP困难: 如果是两个不同的类型,运算符 == 则在两个不同的类型之间进行强制转换 === 操作符执行'类型安全比较' 这意味着只有当两个操作数具 ...

  8. AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失 ...

  9. 快速将一个表的数据生成SQL插入语句

    将一个表中的数据生成SQL插入语句,方便系统快速初始化,在数据库中执行创建以下过程就可以了. ) Drop Procedure GenerateData go CREATE PROCEDURE Gen ...

随机推荐

  1. 查询多列得到map与查询得到po对象

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; i ...

  2. vmware虚拟机提示:无法将Ethernet0连接到虚拟网络vmnet02018-03-07

    编辑——虚拟机网络编辑——还原虚拟机网络配置可以解决

  3. linux下pid命令

    ps aux | grep tomcat|  awk '{if(NR==1)print $2}' Linux:批量修改分隔符(awk.BEGIN.FS.OFS.print.tr命令) 批量修改文件的分 ...

  4. Maven使用之packing篇

    项目的打包类型:pom.jar.war 项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系.项目模块化可以将通用的部分抽离出来,方便重 ...

  5. SETI ACdream - 1430 后缀自动机求不相交子串

    http://blog.csdn.net/gatevin/article/details/45875343 题目是求不重叠的不同子串个数 一般来说, endpos集合包含了子串结尾位置,结尾在&quo ...

  6. Unity Unity发布的ios包在iphone上声音小的原因

    实质上声音是从话筒里出来的,未走扬声器. 仔细查找文档发现是PlayerSettings里的设置不当引起的. 在PlayerSettings取消勾选 Prepare iOS for Recording ...

  7. 《nginx 二》深入理解nginx的各项配置

    Nginx应用场景 1.http服务器.Nginx是一个http服务可以独立提供http服务.可以做网页静态服务器. 2.虚拟主机.可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机. 3. ...

  8. http 中的缓存

    如何判断缓存新鲜度 If-Modified-Since告诉服务器, 在服务器中的响应报文中有一个Last-Modified字段, 如果两者一直则表示在浏览器中缓存的文件是最新的, 可以直接使用浏览器缓 ...

  9. Powershell(3)

    Powershell 可以使用powershell管理的服务 share point, exchange, lync, windows azure, window server, system cen ...

  10. 自定义Qt组件-通讯模块(P3)

    1.   半双工模式实时检测串口 ComHalfDuplex类是为了解决上位机发送控制指令和下位机发送数据会在半双工RS485总线中产生冲突引起乱码而引入的(v0.010版本引入). 解决冲突的原理主 ...