在java中迭代列表数据时刷新列表数据

在java中迭代列表数据时刷新列表数据,java,algorithm,Java,Algorithm,我想在遍历ArrayList时刷新/更改ArrayList中包含的数据 以下是我写的: List<Message> msgList = getList(); if (msgList != null && msgList.size() > 0) { for (int i = 0; i < msgList.size(); i++) { Message message = msgList.get(i); String m

我想在遍历ArrayList时刷新/更改ArrayList中包含的数据

以下是我写的:

List<Message> msgList = getList();

if (msgList != null && msgList.size() > 0) {
    for (int i = 0; i < msgList.size(); i++) {
        Message message = msgList.get(i);
        String msgType =  getMsgTypeFromId(message.getMessageId());

        if (msgType != null) {
            if (msgType.equals(MessageType.INCOMING.getType())) {
                // Do some operation
                msgList = getNewList(); // How to do this, Is it correct ?
                i = 0;
            }
        }
List msgList=getList();
if(msgList!=null&&msgList.size()>0){
对于(int i=0;i
让我知道它是否正确?

一些代码检查:

List<Message> msgList = getList();
// just in case the getNewList() returns null
// check it here---V
for (int i = 0; null!=msgList && i < msgList.size(); i++) {
    Message message = msgList.get(i);
    String msgType = getMsgTypeFromId(message.getMessageId());

    // no need for cascading two ifs. I'm assuming
    // MessageType.INCOMING is a "constant" thus bound to never return null
    if (MessageType.INCOMING.getType().equals(msgType)) {
        // Do some operation
        msgList = getNewList();
        i = 0;
    }
}
List msgList=getList();
//以防getNewList()返回null
//在这里检查---V
for(int i=0;null!=msgList&&i
让我知道这是正确的吗

有时(大多数情况下)它是无效的。您从列表的开头开始处理每个更新/删除的项目。在最坏的情况下,您必须查看第一个元素O(N)次,第二个元素O(N-1)次等

java中的ListIterator支持删除当前元素和替换当前元素,并且元素字段上的更新不涉及列表本身及其迭代器。因此,如果您的“某些操作”仅包括更新/删除/替换当前元素,则可以在不中断循环的情况下执行

这样,您可以在一次迭代中处理整个列表


如果需要对列表进行更广泛的操作(如添加/删除其他元素),以@Adriancolomychi为例。

在我看来是正确的。@SeanBright至少,它看起来没有错……但看起来确实很难看。@Adriancolomychi-我确信我们都写过我们不自豪的代码
索引自动边界异常
是不可能的,尽管这个问题属于你,也不需要检查msgList的大小>0@user7也不需要在循环之前单独检查msgList是否为null,但肯定需要在循环的测试条件下检查它(以防getNewList返回null)。