java - 在 List 和 HashMap 之间使用 retainAll() 函数的时间复杂度是多少?
问题描述
假设我有一个嵌套列表,其中包含 n^2 个元素,并且我有一个 HashMap,其中包含 n^2 个键。我想使用retainAll()
函数获取列表和哈希图之间的共同元素。在这种情况下,retainAll() 的时间复杂度是多少?
List<List<Integer> list = new ArrayList<>();
Map<List<Integer>, Integer> hashmap = new HashMap<List<Integer>, Integer>();
list.retainAll(hashmap);
为了获得共同点,我正在使用这个循环,但它有 n^2 的复杂性。
List<List<Integer>> commons = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (hashmap.get(list.get(i)) != null) {
commons.add(list.get(i));
}
}
此外,如果您有一个具有更好时间复杂度的算法来获得它们的交集,我需要它。
编辑: 实际上问题是,我有一个大小为 n 的整数列表。但我将该列表划分为子列表,子列表计数变为 n^2。由于我想找出 hashmap 包含每个子列表作为其中的键,因此我使用了 n^2 。但根据我的整个项目,它太大了。我正在寻找降低复杂性的方法。
解决方案
好吧,我的意思是,如果您n^2
在列表中有项目,那么复杂性就是O(n^2)
,尽管这确实是一件很奇怪的事情。通常n
是集合的大小,所以retainAll
考虑时间复杂度O(n)
。
据我所知,不可能有一种算法为此产生更好的时间复杂度。您必须至少迭代一次列表...
你可以做的是切换你的数据结构。阅读更多:用于快速交叉路口操作的数据结构?
推荐阅读
- r - R garch 库和 Duan (1995) 模型
- c++ - 我想生成斐波那契数列。这是我的代码,它没有生成所需的斐波那契数列
- python - 扩展坐标列表以包括转置和镜像值
- arrays - 根据python-pandas中的条件将行插入多个索引上的数据框
- javascript - 如何使用 API 在我的后端访问我的 Angular 前端图像
- dataframe - 根据一列的值替换多列中的值
- mysql - MySQL在日期时间字段中创建具有唯一年月日键的表
- php - YII2 如何使用 hasMany 关系获取多级关系中的数据
- android - 在 android studio 中的 WebView 内向按钮添加操作
- python - 为什么即使我的用户名密码正确,我也会收到 b' authentication failed 错误?