java - 如果添加现有数据,Java 中的 HashMap 内存使用量是多少
问题描述
假设我有两个相同长度的链表。
class Node {
int val;
Node next;
}
List<Node> list1 = LinkedList<>(); // list1 has 1,2,3,4,5,6,7... N
List<Node> list2 = LinkedList<>(); // list2 has 1,2,3,4,5,6,7... N
我创建一个HashMap
并将 list1 的每个元素映射到 list2
Map<Node, Node> map = new HashMap<Node, Node>();
for (int i = 0; i < list.size(); i++){
map.put(list1.get(i), list2.get(i));
}
唯一插入对现有数据的HashMap
引用,它不会创建任何新节点。在内存使用方面,HashMap 消耗了多少内存?换句话说,如果我们谈论这个插入的空间复杂度(我们没有将list1
and使用的内存list2
算作额外的内存),那么空间复杂度是多少?O(N) 还是 O(1)?
解决方案
HashMap 必须保留对每个键和它所具有的每个值的引用。实际上,由于实现映射所需的内部数据结构,它通常会占用更多,但与对键和值的引用相比,它可以忽略不计。长话短说 - HashMap 的空间复杂度为 O(n)。
推荐阅读
- json - 获取json中的时间戳并在javascipt中转换
- javascript - Google Apps Script:如何使用 Google App Script 从单个 GA 帐户创建用户列表并每月以 CSV 格式邮寄一次
- go - 如何在另一个内置的 Open 策略代理中使用内置
- postgresql - Kafka 接收器连接器不支持数组字段的源数据类型
- python - pyspark 向包含双引号的字符串添加额外的双引号
- vue.js - 如何将搜索查询变量绑定到输入字段并将其与 Vue js 中的计算函数一起使用?
- tensorflow - Better way to concatenate ConvLSTM2D model and Tabular model
- r - 找到最小和最大儒略日,然后找到这两者的差异
- android - 适用于 Android 的多模块项目的 SonarQube
- c# - 如果图像的值为空,则将图像从数据库加载到 Windows 窗体中