Java在字符串的arraylist中搜索另一个arraylist中的单词
正如标题所说,我有一个超过10000个单词的arraylist,我希望使用另一个arraylist,在这里我选择了要搜索的单词。我无法解释得比这更简单,但有一些代码你可能会理解我试图实现的目标。基本上,一个包含大量单词的arraylist,然后是另一个包含5个左右单词的arraylist,用于检查这些单词是否出现在长arraylist中Java在字符串的arraylist中搜索另一个arraylist中的单词,java,list,arraylist,Java,List,Arraylist,正如标题所说,我有一个超过10000个单词的arraylist,我希望使用另一个arraylist,在这里我选择了要搜索的单词。我无法解释得比这更简单,但有一些代码你可能会理解我试图实现的目标。基本上,一个包含大量单词的arraylist,然后是另一个包含5个左右单词的arraylist,用于检查这些单词是否出现在长arraylist中 //TO DO: Profile the search method try { Scanner input = new Scanne
//TO DO: Profile the search method
try {
Scanner input = new Scanner(new File("textFile.txt"));
int reps = 100;
List<String> list = new ArrayList();
List<String> searchValues = new ArrayList();
searchValues.add("You");
searchValues.add("and");
searchValues.add("So");
searchValues.add("we");
searchValues.add("important");
while (input.hasNext()) {
list.add(input.next());
}
input.close();
System.out.println("Amount of words in a .txt file: " + list.size());
//Start to time the method
long start = System.currentTimeMillis();
for (int i = 0; i < reps; i++) {
for (int j = 0; j < list.size(); j++) {
//List value = index.search(list.get(j));
List value = index.search(list.get(j));
}
}
long end = System.currentTimeMillis();
System.out.println("Time Taken: " + (end - start) + "ms");
} catch (IOException exc) {
System.out.println("File does not exist");
exc.printStackTrace();
System.exit(1);
}
//要执行的操作:配置搜索方法
试一试{
扫描仪输入=新扫描仪(新文件(“textFile.txt”);
int reps=100;
列表=新的ArrayList();
List searchValues=new ArrayList();
searchValues.add(“您”);
搜索值。添加(“和”);
搜索值。添加(“So”);
searchValues.add(“我们”);
搜索值。添加(“重要”);
while(input.hasNext()){
list.add(input.next());
}
input.close();
System.out.println(“一个.txt文件中的字数:“+list.size()”);
//开始计时该方法
长启动=System.currentTimeMillis();
对于(int i=0;i
将从列表
中删除所有不在搜索值
中的值。()
将从列表
中删除所有不在搜索值
中的值。()您还可以使用:
list.stream().filter(s -> ! searchValues.contains(s));
这将返回一个由searchValues
列表中不存在的元素组成的流(考虑到您正在使用Java 8)。您还可以使用:
list.stream().filter(s -> ! searchValues.contains(s));
这将返回一个由
searchValues
列表中不存在的元素组成的流(考虑到您正在使用Java 8)。retainAll internal calls contains()将在第二个列表上迭代,因此您将得到O(n x m)时间复杂度搜索
您可以使用hashmap搜索单词,插入所有条目并查找多次出现的条目。这应该给你2 x O(n)+O(m)
但是,如果第二个列表只有5个对象,那么这可能无关紧要 retainAll internal calls contains()将在第二个列表上迭代,因此您可以获得O(nx m)时间复杂度搜索 您可以使用hashmap搜索单词,插入所有条目并查找多次出现的条目。这应该给你2 x O(n)+O(m)
但是,如果第二个列表只有5个对象,那么这可能无关紧要 我现在来看看。谢谢。我现在就来看看。非常感谢。