讓我們2周字符串的ArrayList什麼是比較大量字符串的最有效的算法?
List<String> namesListA = new ArrayList<>(/*50 000 strings*/);
List<String> namesListB = new ArrayList<>(/*400 000 strings*/);
RemoveAll方法似乎不工作。後:
namesListA.removeAll(namesListB);
namesListA.size()仍然是50000編輯:輸入數據是不正確的,它的實際工作,但是需要很長的石灰。
我寫了下面的蠻力代碼:
boolean match;
for (String stringA: namesListA)
{
match = false;
for (String stringB: namesListB)
{
if (stringA.equals(stringB))
{
match = true;
break;
}
}
if (!match)
{
finallist.add(stringA);
}
}
但它需要8小時才能完成。它有什麼已知的有效算法來搜索字符串?喜歡按字母順序對字符串進行排序,然後逐字或類似地搜索。
你可以對這些列表進行排序,但這也會花費太多時間。這將有助於減少閱讀次數。然後你可以使用一些dychotomial搜索來再次減少它。但爲此,您需要對這些列表進行排序。有[Collections.sort](https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List)) – AxelH
如果'removeAll' isn' t刪除任何,那麼這些列表沒有共同的字符串。 – khelwood
你確定removeAll不工作? –