在Java中将字符串集合复制到另一个字符串的时间复杂度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中将字符串集合复制到另一个字符串的时间复杂度相关的知识,希望对你有一定的参考价值。

关于Java Collection的add函数如何处理字符串,我有几个问题。例如,在下面的代码片段中,我将字符串的List复制到HashSet。在这种情况下,最坏情况下的总时间复杂度是多少?是O(M x N)还是O(N),其中M是列表中任何字符串的最大长度,而N是列表中字符串的总数。

public HashSet<String> createDict(List<String> wordList) {
   HashSet<String> wordDict = new HashSet<>();
   for(String word : wordList) {
       wordDict.add(word);
   }
   return wordDict;
}

如果使用下面的代码而不是循环,时间复杂度会完全一样吗?

HashSet<String> wordDict = new HashSet<>(wordList);
答案

HashSet使用HashTable实现。也就是说,它具有O(1)插入,并且正在使用哈希函数插入元素。在这种情况下,插入元素的大小实际上并不重要,它们都被认为是O(1)。因此,总的来说,代码具有O(N)复杂度。

另一答案

字符串的长度与在集合之间复制元素无关。实际上,您不是复制String而是复制它们的引用。因此复杂度将为O(N)。

[关于new HashSet<>(wordList)的第二个问题-此调用比执行循环要快。这样做的原因是在HashSet(Collection)构造函数中,它首先检查该集合的大小,然后基于该大小以initialCapacity开始。这样,就不必经常调整底层HashMap的大小。

以上是关于在Java中将字符串集合复制到另一个字符串的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firestore -Flutter 中将所有文档从一个集合复制到另一个集合?

在C中将奇数索引元素从一个数组复制到另一个数组

在C ++中将字符串复制到另一个字符串并打印其字符?

在Java中将文件从一个目录复制到另一个目录

如何在 Java 中将 DOM 节点从一个文档复制到另一个文档?

如何在java中将字符串集合转换为字符串数组[重复]