在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 中将所有文档从一个集合复制到另一个集合?