静态arraylists失去了什么包含?

时间:2014-07-03 08:08:38

标签: java arraylist memory-leaks

我有一个程序及其处理相当大量的数据。它将一个静态字符串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()可以提高性能。

1 个答案:

答案 0 :(得分:4)

简单的答案是:不。

ArrayLists不要丢失其中的内容。

您的症状可能由许多因素引起,包括线程/同步问题,字符串中的细微差别等。

尽管如此,你应该考虑使用HashSet。它会使“包含”检查更快。

使用HashSet上面的所有代码变为:

List<String> list;
Set<String> set;

for (String str: list) {
   if (!set.contains(str)) {
      //do something
   }
}

更简单,更快速。

如果您确实需要使用列表,那么您可以执行相同的操作,但将这两个集合都设置为List,API不会更改,但性能会发生变化。