zoukankan      html  css  js  c++  java
  • 45. 腾讯面试题: 使用hashmap 插入数据,怎么样依照插入数据的顺序输出数据

    题目:使用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), 空间上要比上面少些。


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




  • 相关阅读:
    Go语言并发与并行学习笔记(一)
    Tomcat编码问题
    如何为Kafka集群选择合适的Partitions数量
    go局部变量的存储空间是堆还是栈?
    git的一个merge流程
    GO工程和包
    Go运行环境搭建(MacLinux)
    一些Shell命令
    python_17_数据运算
    python_15_os
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10640503.html
Copyright © 2011-2022 走看看