簡體   English   中英

在 List 和 HashMap 之間使用 retainAll() function 的時間復雜度是多少?

[英]What is the time complexity of using retainAll() function between List and HashMap?

假設我有一個嵌套列表,其中包含 n^2 元素,並且我有一個 HashMap ,其中包含 n^2 個鍵。 我想通過使用retainAll() function 獲得列表和 hashmap 之間的共同元素。 在這種情況下,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)

據我所知,不可能有一種算法為此產生更好的時間復雜度。 您必須至少迭代一次列表...

你可以做的是切換你的數據結構。 閱讀更多: 用於快速交叉路口操作的數據結構?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM