Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何迭代过大的ArrayList<;字符串>;?_Java - Fatal编程技术网

Java 如何迭代过大的ArrayList<;字符串>;?

Java 如何迭代过大的ArrayList<;字符串>;?,java,Java,我有两个ArrayList sourceMessageList和TargetMessageList。我需要比较两个消息列表数据 现在让我们假设列表1-100条记录。清单2-1000条记录 从列表1中,将第一条记录与列表2中的每条记录进行比较,然后将列表1中的第二条记录与列表2中的每条记录进行比较 但是list2正在将list1中第一个源数据的值hasNext()设置为true private void compareMessageList(ArrayList<String> sour

我有两个ArrayList sourceMessageList和TargetMessageList。我需要比较两个消息列表数据

现在让我们假设列表1-100条记录。清单2-1000条记录 从列表1中,将第一条记录与列表2中的每条记录进行比较,然后将列表1中的第二条记录与列表2中的每条记录进行比较

但是list2正在将list1中第一个源数据的值hasNext()设置为true

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)取代。