Java 如何迭代过大的ArrayList<;字符串>;?
我有两个ArrayList sourceMessageList和TargetMessageList。我需要比较两个消息列表数据 现在让我们假设列表1-100条记录。清单2-1000条记录 从列表1中,将第一条记录与列表2中的每条记录进行比较,然后将列表1中的第二条记录与列表2中的每条记录进行比较 但是list2正在将list1中第一个源数据的值hasNext()设置为trueJava 如何迭代过大的ArrayList<;字符串>;?,java,Java,我有两个ArrayList sourceMessageList和TargetMessageList。我需要比较两个消息列表数据 现在让我们假设列表1-100条记录。清单2-1000条记录 从列表1中,将第一条记录与列表2中的每条记录进行比较,然后将列表1中的第二条记录与列表2中的每条记录进行比较 但是list2正在将list1中第一个源数据的值hasNext()设置为true private void compareMessageList(ArrayList<String> sour
private void compareMessageList(ArrayList<String> source_messageList, ArrayList<String> target_messageList)
throws Exception {
// TODO Auto-generated method stub
Iterator<String> sourceMessageIterator = source_messageList.iterator();
Iterator<String> targetMessageIterator = null;
while (sourceMessageIterator.hasNext()) {
String sourceMessage = (String) sourceMessageIterator.next();
targetMessageIterator = target_messageList.iterator();
while (targetMessageIterator.hasNext()) {
String targetMessage = (String) targetMessageIterator.next();
if (getCorpValue(sourceMessage).equalsIgnoreCase(getCorpValue(targetMessage))) {
assertXMLEquals(convertSwiftMessageToXML(sourceMessage), convertSwiftMessageToXML(targetMessage));
}
}
}
if (buffer.toString().length() > 0) {
writeDifferenceTofile(buffer.toString());
buffer.delete(0, buffer.length());
throw new CatsException("There are some differences in the files.");
}
System.out.println("Exiting now ...");
}
private void compareMessageList(ArrayList源消息列表、ArrayList目标消息列表)
抛出异常{
//TODO自动生成的方法存根
迭代器sourceMessageIterator=source_messageList.Iterator();
迭代器targetMessageIterator=null;
while(sourceMessageIterator.hasNext()){
String sourceMessage=(String)sourceMessageIterator.next();
targetMessageIterator=target_messageList.iterator();
while(targetMessageIterator.hasNext()){
字符串targetMessage=(字符串)targetMessageIterator.next();
if(getCorpValue(sourceMessage).equalsIgnoreCase(getCorpValue(targetMessage))){
assertXMLEquals(convertSwiftMessageToXML(sourceMessage),convertSwiftMessageToXML(targetMessage));
}
}
}
if(buffer.toString().length()>0){
writeDifferenceTofile(buffer.toString());
delete(0,buffer.length());
抛出新的CatsException(“文件中存在一些差异”);
}
System.out.println(“现在退出…”);
}
上面的代码执行时间太长 要加快速度:
HashMap<String, String> lowers = new HashMap<String, String>();
for (String source : source_messageList) {
lowers.put(getCorpValue(source).toLowerCase(), source);
}
for (String target : target_messageList) {
final String corpTarget = getCorpValue(target).toLowerCase();
if(lowers.containsKey(corpTarget)) {
assertXMLEquals(
convertSwiftMessageToXML(lowers.get(corpTarget)),
convertSwiftMessageToXML(target)
);
}
}
HashMap lowers=newhashmap();
for(字符串源:源\消息列表){
lowers.put(getCorpValue(source).toLowerCase(),source);
}
for(字符串目标:目标\消息列表){
最后一个字符串corpTarget=getCorpValue(target.toLowerCase();
if(降低容器(corpTarget)){
assertXMLEquals(
convertSwiftMessageToXML(lowers.get(corpTarget)),
convertSwiftMessageToXML(目标)
);
}
}
嗯?请澄清。你需要更多的信息吗。我不太确定你在问什么,但我猜想,不管你的问题是什么,它可能会通过移动< <代码>迭代器TraceMeaseAdvultActer=……/> >行在外部<代码>中被修正,而 Rooand考虑使用循环代替迭代器。是的,它可能是……我也尝试过这一点,但是它花费了太多的时间来执行。因为列表1有100条记录,而列表2有1000条记录。因此,对于列表1记录1-与列表2中的每条记录进行比较。然后在列表1记录2中-与列表2中的每条记录进行比较。因此,可能需要比较100*1000=10000条记录,这需要时间来执行。请提供输入。工作正常。但是我认为lowers.contains(corpTarget)应该被lowers.containsKey(corpTarget)取代。