java - 时间复杂度 - 将映射条目复制到 Arraylist

标签 java arraylist collections hashmap time-complexity

我一直在寻找根据值对 HashMap 进行排序的有效方法,我遇到了声称是 O(n log n) 的解决方案,方法是将条目复制到列表并按值对列表进行排序;复制回 LinkedHashMap。我在想这可能是 O(n^2) 而不是 O(n log n)。

List<Entry<K, V>> entries = new ArrayList<Entry<K, V>>(map.entrySet());

我想确认一下上面代码的时间复杂度是不是O(n^2)?

这是我的理解:我们通过 map 的条目进行迭代(这是 O(n)),当我们将每个条目添加到列表时,它会被添加到列表的末尾和执行所需的时间这将是 O(n) 以及使其成为 O(n^2)。

这是正确的吗?

最佳答案

  1. 执行 new ArrayList<Entry<K, V>>(map.entrySet())是 O(n)。 map.entrySet()将转换为 Entry[]toArray() .没有通常的追加和调整大小 add() .

  2. 排序 ArrayList是 O(n log n) 由于 TimSort .

  3. 创建 new LinedHashMap来自 ArrayList是 O(n)。

整个方法将是 O(n log n),因为排序将是主要操作。

关于java - 时间复杂度 - 将映射条目复制到 Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313397/

相关文章:

java - ImageButton 聚焦但不可点击

java - 如何知道半角或全角字符?

java - 如何编码这个特定的方法?

java - 尝试用 Java 编写一个方法,在给定 customerID 的情况下搜索数据库列表并返回 Customer 对象

java - 如何从二维数组列表中的特定位置提取整数?

java - 当客户端连接时将 JCheckBox 包含在 JFrame 中

javascript - D3 - 如何根据行索引合并 2 个数组

java - 这是在每个新请求上初始化一个新的 httpClient 的好习惯吗

java - 如何使用java流从网络获取PDF文件

java - 将 List<int[]> .get() 函数与数组进行比较的 boolean 表达式出现问题