2015-11-13 147 views
0

正如標題所示,我有一個超過10000個字的數組列表,我希望在選擇要搜索的字詞時使用另一個數組列表。不能解釋它比這更簡單,但有你可能捕捉到我試圖實現的代碼。基本上,一個詞的數組列表然後是另一個5個左右的單詞列表,用來檢查這些單詞是否出現在長單詞列表中。Java在另一個數組列表中搜索字符串的數組列表

//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); 
    } 
+0

現在就來看看。謝謝。 –

回答

3
list.retainAll(searchValues) 

將從list刪除所有的值其不在searchValues。 (Javadoc

+0

..哇,有一種這樣的方法..我不知道:) –

0

您還可以使用:

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

這將返回由不中searchValues列表中存在的元素(考慮到你正在使用Java工作8)流。

1

retainAll內部調用contains()將遍歷第二個列表,因此您可以獲得O(n x m)時間複雜度搜索。

您可以使用散列圖搜索單詞,插入所有條目並找到多次出現的單詞。這應該給你2 x O(n)+ O(m)。

但是,如果您的第二個列表僅包含5個對象,則這可能無關緊要。

相關問題