- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一个 txt 文件的内容读入一个 HashSet
。该文件几乎包含了英语中的每一个单词,并且每个单词都变成了HashSet
中的一个字符串。
在我的应用程序中,字符被添加到字符串中。我想检查此字符串是否等于或可以等于 HashSet
中的任何字符串。也就是说,假设 HashSet
仅包含字符串 apple。我有一个字符串 appl,现在我想过滤掉 HashSet
,直到它变成一个只包含以 appl 开头的字符串的集合(在这种情况下只有苹果)。
我可以迭代整个 HashSet
并使用 startsWith(String)
方法,因为我构建了一个新的过滤 HashSet
。但是我的初始 HashSet
非常大,所以我的问题是:是否有更有效的方法(可能使用不同类型的 Collection?)
我现在将如何做的一些代码:
private HashSet<String> filter(String partOfWord){
HashSet<String> filteredSet = new HashSet<>();
for (String word : dictionary) { // dictionary is the full HashSet
if (word.startsWith(partOfWord)) {
filteredSet.add(word);
}
}
return filteredSet;
}
最佳答案
A trie是完成此任务的终极武器,但您可以从 TreeSet
中获得良好的效率:
private TreeSet<String> dictionary;
private TreeSet<String> filter(String partOfWord) {
return (TreeSet<String>)dictionary.subSet(partOfWord, partOfWord + "zzz");
}
以“appl”开头的所有内容也介于“appl”(如果它本身是一个单词,则包含在内)和“applzzz”(没有英语单词中有 3 个连续的“z”) ,这在字典序上大于所有以“appl”开头的单词。调用 subset()
的时间复杂度是O(log n)
找到子集的开始和O(m)
(m = 返回的数字)范围,这非常好。
请注意,如果您能够随着单词的增长将返回的集合重新用作新词典,那么您的代码总体上会更加高效。
投向TreeSet<String>
需要因为 subSet()
是 SortedSet
的一种方法接口(interface)并返回 SortedSet
, 但它是 covariant因为 TreeSet
implementation返回一个 View (另一个效率优势),这当然是另一个 TreeSet
.
为了提高效率,但代码更难看,您可以使用排序的 String[]
和 Arrays.binarySearch()
,然后一旦您找到了您的匹配项,您就可以快速遍历数组集合您的匹配项。
请注意 TreeSet
和排序数组有 O(log n)
查找时间,而 HashSet
(虽然不适合这项任务)是O(1)
查看时间。
关于java - 从 HashSet(或其他集合)中过滤掉字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32866683/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: List versus ArrayList variable type? 我正在初始化一个 HashSet就
使用初始化有什么区别 HashSet s = new HashSet(2) 和 HashSet s = new HashSet(2) ? 最佳答案 唯一的区别是第一个会向您提供有关原始类型“HashS
这个问题已经有答案了: What does it mean to "program to an interface"? (33 个回答) 已关闭 9 年前。 这两个调用有什么区别: Set insta
我知道,如果您有两个 HashSet ,您可以创建第三个将这两个 HashSet 添加。但是,出于我的目的,我需要更改之前的 456 ,查找某些条件,然后如果不满足,则再次更改设置。我的目的是,我将给
我正在尝试使用 HashSet作为其他人的 key HashSet .我找到了 this question and answer指出要实现 Hash HashSet 的特征,但我无法让我的具体案例发挥
我有两个 HashSet s,我想实现 a = a U b .如果可能的话,我想使用 HashSet::union而不是循环或其他调整。 我尝试了以下方法: use std::collections:
我有一个HashSet包含一件元素。尝试添加到集合中的新项目与现有项目相同,.equals() 。确认newElement事实上是一样的,我有一些调试打印循环通过我的 HashSet并打印每个项目:
我创建了一个 HashSet 的 HashSet。我想访问子集中的整数值。我的 HashSet 的 HashSet 是包含 Set 的所有子集的集合,如下所示:- [[], [1], [2], [1,
我必须操作存在于大 HashSet 对象下的字符串 我想知道是否有可能操纵现有的 不创建新 HashSet 对象的 HashSet 对象 以下是我当前的逻辑,其中,我想避免创建第二个 HashSet(
好奇心和效率是这个问题的原因。在某些循环运行后,我正在创建许多新的哈希集: HashSet 当前在类的顶部这样声明: private Set failedTests; 然后在代码的后面,只要我重新运行
这个问题在这里已经有了答案: How can I insert all values of one HashSet into another HashSet? (2 个回答) 9 个月前关闭。 当我尝
我有两个 Action 哈希集,如果它们出现在第二个哈希集中,我该如何删除所有相同的操作? 最佳答案 您正在寻找 ExceptWith 方法。 关于c# - 从 hashset of actions
我有代码 List> list = new ArrayList>(50); pos = 17; // just some index less than 50 list.add(pos, new Ha
我想在 HashSet 中处理一些新数据,而不需要任何旧数据或旧 HashSet 对象。旧的 HashSet 对象不在其他地方引用。 简单地做hashset = new HashSet()更好吗?让
我正在尝试学习 Rust 的诀窍,我正在玩这个小函数: fn anagrams_for(word: &str, possible_anagrams: &[&'a str]) -> HashSet {
这个问题已经有答案了: HashSet look-up complexity? (4 个回答) 已关闭 6 年前。 访问数组中特定对象/数据的平均复杂度是 O(n) ,这里 n 是数组长度。Java
我今天接受了采访,接受我采访的人对他的陈述感到困惑,询问是否有可能 TreeSet等于 HashSet但不是 HashSet等于 TreeSet .我说“不”,但据他说,答案是"is"。 怎么可能?
HashSet 没有AddRange 方法,所以我想为它写一个扩展方法。这是我的: public static void AddRange(this ICollection collection, I
我编写了一个接受 HashSet 的函数范围。我想通过 HashSet其中 SomeEnumeration具有基础类型 byte .有没有简单的方法可以做到这一点? public enum SomeE
我想存储一些不允许重复的像素位置,所以首先想到的是 HashSet或类似的类(class)。然而,与 HashSet 之类的东西相比,这似乎非常慢. 例如,这段代码: HashSet points =
我是一名优秀的程序员,十分优秀!