Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java在字符串的arraylist中搜索另一个arraylist中的单词_Java_List_Arraylist - Fatal编程技术网

Java在字符串的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

正如标题所说,我有一个超过10000个单词的arraylist,我希望使用另一个arraylist,在这里我选择了要搜索的单词。我无法解释得比这更简单,但有一些代码你可能会理解我试图实现的目标。基本上,一个包含大量单词的arraylist,然后是另一个包含5个左右单词的arraylist,用于检查这些单词是否出现在长arraylist中

//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个对象,那么这可能无关紧要

我现在来看看。谢谢。我现在就来看看。非常感谢。