45. 腾讯面试题: 使用hashmap 插入数据,怎么样按照插入数据的顺序输出数据

当使用HashMap插入数据时,数据的顺序可能会改变。本文介绍了三种方法来按照插入顺序输出数据:维护一个额外的vector记录顺序,使用List解决删除问题,以及使用Java的LinkedHashMap。每种方法都有其优缺点,如空间复杂度和操作效率。
摘要由CSDN通过智能技术生成

题目:使用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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值