java中的Retainal非常慢。。。有没有更快的方法?

java中的Retainal非常慢。。。有没有更快的方法?,java,performance,arraylist,Java,Performance,Arraylist,我为大学做了一个项目«创建一本双语词典,比较两个文本(第二本是第一本的翻译) 有3段文字可以测试我们的程序。对于小型设备,输出时间不到1秒,中型设备为45秒,大型设备为85分钟 NetBeans说最长的方法是ArrayList上的«Retainal»。有没有更快的方法 编辑:一小段代码,我必须检查每个单词/翻译的相关索引 double ens1= list2.size(); double ens2=test.size(); //intersection of the both list list

我为大学做了一个项目«创建一本双语词典,比较两个文本(第二本是第一本的翻译)

有3段文字可以测试我们的程序。对于小型设备,输出时间不到1秒,中型设备为45秒,大型设备为85分钟

NetBeans说最长的方法是ArrayList上的«Retainal»。有没有更快的方法

编辑:一小段代码,我必须检查每个单词/翻译的相关索引

double ens1= list2.size();
double ens2=test.size();
//intersection of the both list
list2.retainAll(test);
//size of the intersection
double long_fin=list2.size();
//correlation index
correlation=(long_fin/(Math.sqrt(ens1*ens2)));

使用
设置
而不是
列表
。这大大降低了复杂性

或者,您可以对两个列表进行排序,并在一个循环中实现“全部保留”


(另一条评论:使用
int
而不是
double
——这会让我们安全打字开发人员神经紧张。)

请出示一些代码。另外,我猜你使用了错误的DS,如果你想经常搜索,请使用集合或地图谢谢你的回答!我的两个列表都已经排序了,所以我使用了一个自定义的retainAll(带二进制搜索),它真的更有效。使用集合真的很有帮助。很多我用集合替换了两个列表,这样就减少了对两个列表调用Retainal所需的时间,每个列表大约有500.000个整数,从15分钟减少到8秒。@BjørnStenfeldt谢谢,实际统计数据确实说明了这一点。从二次复杂到线性复杂等等。我们Java程序员经常陷入这样的陷阱:每个集合看起来都像一个
列表。