我有一个程序及其处理相当大量的数据。它将一个静态字符串arraylist与另一个静态字符串arraylist进行比较,检查是否包含字符串。
但是会发生什么事情是在处理后让40k +字符串在检查时开始失败。失败我的意思是它开始不认识到另一个字符串已经存在了吗?
这是否有原因或者arraylist太大了?
由于
编辑
for (int i = 0; i < arraylist1.size(); i++) {
boolean enter = true;
for (int x = 0; x < arraylist2.size() && enter; x++) {
if (arraylist1.get(i).getString().matches(arraylist2.get(x))) {
enter = false;
}
}
if (enter) {
//do something
}
}
EDIT ****
该问题偏离主题,但使用.equals()代替.matches()可以提高性能。
答案 0 :(得分:4)
简单的答案是:不。
ArrayLists
不要丢失其中的内容。
您的症状可能由许多因素引起,包括线程/同步问题,字符串中的细微差别等。
尽管如此,你应该考虑使用HashSet
。它会使“包含”检查更快。
使用HashSet
上面的所有代码变为:
List<String> list;
Set<String> set;
for (String str: list) {
if (!set.contains(str)) {
//do something
}
}
更简单,更快速。
如果您确实需要使用列表,那么您可以执行相同的操作,但将这两个集合都设置为List
,API不会更改,但性能会发生变化。