如何动态更改列表

时间:2017-04-18 02:36:38

标签: java list changelist

我的意思是我给出了一系列对象,如果我要更改的列表中没有来自给定列表的某些对象,那么我将它们添加到我的,如果我的列表中有一些给定列表没有的对象,那么我将其从列表中删除。 我试图实现这一点,但它没有成功。

void changeList(String data){
    String[] elements = data.split(":");
    for (int i = 0; i < elements.length - 1; i++) {
        if(i < listOfUsersModel.size() && !listOfUsersModel.getElementAt(i).equalsIgnoreCase(elements[i+1])){
            listOfUsersModel.remove(i);
            listOfUsersModel.addElement("<html>" + elements[i+1] + "</html>");
        } else if (i >= listOfUsersModel.size()){
            listOfUsersModel.addElement("<html>" + elements[i+1] + "</html>");
        }
    }
}

是的,元素中的第一个元素将永远是LIST,我只需要它来指定它是否是列表或其他内容。附: ListOfUsersModel是一个DefaultListModel对象。

1 个答案:

答案 0 :(得分:1)

我可以在您的代码中看到一些问题:

  1. 您有一个字符串数组(由split生成)和一个列表。您正在使用数组的索引作为列表的索引。这意味着如果匹配元素与数组中的索引相同,则只会删除列表中的匹配元素。这与您尝试做的描述不符。

  2. 从列表中删除元素时,删除元素后的所有元素都会移动到其他位置;即removeElement(i)导致元素i+1移动到位置i,元素i+2移动到i+1,依此类推。但是......然后你增加i !!

  3. addElement在列表末尾添加了元素

  4. 如果您计划删除/替换匹配的所有元素,则需要嵌套循环。另外,请查看您正在使用的类的setElementinsertElement方法。 (您显然使用的不是List API中的方法......但我无法确定它是哪种API。)

    最后,我不知道你试图这样做的地方:

      

    ...如果我的列表中有一些给定列表没有的对象,那么我将其从列表中删除。

    为此,您需要使用另一对嵌套循环进行第二次传递......