Java 静态数组列表是否丢失了所包含的内容?

Java 静态数组列表是否丢失了所包含的内容?,java,arraylist,memory-leaks,Java,Arraylist,Memory Leaks,我有一个程序,它处理大量的数据。它将一个静态字符串arraylist与另一个静态字符串arraylist进行比较,检查其中是否包含字符串 但发生的情况是,在处理40k+字符串之后,它开始在检查中失败。我所说的失败是指它开始无法识别另一个字符串中已经存在的字符串 这是有原因的还是arraylist太大了 谢谢 编辑 for(int i=0;i

我有一个程序,它处理大量的数据。它将一个静态字符串arraylist与另一个静态字符串arraylist进行比较,检查其中是否包含字符串

但发生的情况是,在处理40k+字符串之后,它开始在检查中失败。我所说的失败是指它开始无法识别另一个字符串中已经存在的字符串

这是有原因的还是arraylist太大了

谢谢

编辑

for(int i=0;i
编辑****


与问题无关,但使用.equals()而不是.matches()极大地提高了性能。

简单的答案是:不

ArrayLists
不要丢失其中的内容

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

无论如何,你应该考虑使用<代码>哈什集。它将使“包含”检查更快

使用
HashSet
以上所有代码将变为:

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

for (String str: list) {
   if (!set.contains(str)) {
      //do something
   }
}
列表;
集合;
for(字符串str:list){
如果(!set.contains(str)){
//做点什么
}
}
更简单、更快


如果您确实需要使用列表,您可以做同样的事情,但将两个集合都作为
List
,API不会改变,但性能会改变。

简单的答案是:否

ArrayLists
不要丢失其中的内容

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

无论如何,你应该考虑使用<代码>哈什集。它将使“包含”检查更快

使用
HashSet
以上所有代码将变为:

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

for (String str: list) {
   if (!set.contains(str)) {
      //do something
   }
}
列表;
集合;
for(字符串str:list){
如果(!set.contains(str)){
//做点什么
}
}
更简单、更快


如果您确实需要使用列表,那么您可以做同样的事情,但将两个集合都作为
列表
,API不会改变,但性能会改变。

您可以发布一些代码并产生故障/异常吗?您还是应该使用哈希集。这将永远持续下去。除非arraylist2包含正则表达式,否则您应该使用equals(),而不是matches()。理想情况下,发布一个简短但完整的程序来演示这个问题。我不会得到失败或异常,而是一个看似无限循环的结果。当我在一段时间后打印出我所有的字符串时,它开始打印出已经添加的字符串/如果两个列表的大小都在40k左右,它可能会运行得太长。不要将matches()用于简单字符串比较-使用equals()。这将使您的执行时间轻松增加10倍。您可以发布一些导致失败/异常的代码吗?您还是应该使用哈希集。这将永远持续下去。除非arraylist2包含正则表达式,否则您应该使用equals(),而不是matches()。理想情况下,发布一个简短但完整的程序来演示这个问题。我不会得到失败或异常,而是一个看似无限循环的结果。当我在一段时间后打印出我所有的字符串时,它开始打印出已经添加的字符串/如果两个列表的大小都在40k左右,它可能会运行得太长。不要将matches()用于简单字符串比较-使用equals()。这将使您的执行时间轻松增加10倍。