Java在另一个arraylist中搜索字符串的arraylist

时间:2015-11-13 13:58:43

标签: java list arraylist

正如标题所说,我有一个超过10000字的arraylist,我希望使用另一个单词的arraylist,我选择要搜索的单词。不能解释它比这更简单但是你可能会抓住我想要实现的代码。基本上,很多单词的一个arraylist然后是5个左右的单词的另一个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);
    }

3 个答案:

答案 0 :(得分:3)

list.retainAll(searchValues)

将移除list中不属于searchValues的所有值。 (Javadoc

答案 1 :(得分:1)

retainAll在内部调用contains(),它将迭代第二个列表,因此您可以获得O(n x m)时间复杂度搜索。

您可以使用散列图搜索单词,插入所有条目并查找多次出现的单词。这应该给你2 x O(n)+ O(m)。

但是,如果您的第二个列表只有5个对象,则可能无关紧要。

答案 2 :(得分:0)

您也可以使用:

list.stream().filter(s -> ! searchValues.contains(s));

这将返回一个由searchValues列表中不存在的元素组成的流(考虑到您正在使用Java 8)。