Java中高级面试题—基础知识—3)如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现;
2019-01-15 14:50
405 查看
如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现
实现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), 空间上要比上面少些
相关文章推荐
- 如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现
- Java基础面试题2-HashMap的源码,实现原理,底层结构
- Java基础知识强化之集合框架笔记79:HashMap的实现原理
- 2014阿里实习生面试题——哈希的原理和java中hashmap如何实现的
- java基础—HashMap实现原理,如何保证HashMap的线程安全?
- Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)
- (java基础知识)如何将HashMap,按照value值排序
- Java基础知识强化18:抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- java servlet 几种页面跳转的方法,需要的朋友可以参考一下 在访问网页的过程中,页面自动刷新、跳转和重定向是经常用到的,这里就说说在Java中是如何实现这些功能的! 一、页面自动刷新
- JAVA 面试基础试题(大家可以参考一下学Java时需要掌握的基础知识)
- java基础——HashMap的源码,实现原理,底层结构
- Java基础知识强化之集合框架笔记29:使用LinkedList实现栈数据结构的集合代码(面试题)
- 数据结构:线性表的顺序存储--Java实现
- JavaScript 入门基础知识 想学习js的朋友可以参考下
- 网络基础知识、在Java中实现UDP协议编程
- java基础知识记录--Java web部分(摘自张孝祥整理java面试题)
- 线性表 顺序存储 链式存储 ---java实现
- java基础知识记录--异常 (摘自张孝祥整理java面试题)
- java基础知识记录--流行框架与新技术(摘自张孝祥整理java面试题)
- 循环队列-顺序存储-Java实现