【问题标题】:How to dynamically change list如何动态更改列表
【发布时间】:2017-09-13 17:33:50
【问题描述】:

我的意思是我得到了一个对象数组,如果我要更改的列表没有给定列表中的一些对象,那么我将它们添加到我的列表中,如果我的列表确实有一些给定列表没有的对象,然后我将它们从列表中删除。 我试过实现这个,但没有成功。

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>");
        }
    }
}

是的,elements 中的第一个元素将始终是 LIST,我只需要它来指定它是一个列表还是其他东西。附言ListOfUsersModel 是一个 DefaultListModel 对象。

【问题讨论】:

  • 如果您打算在迭代时从List(或任何集合)中删除元素,您应该使用正确的Iterator
  • 我认为使用数组对你没有帮助,尝试使用ArrayList
  • @user7790438 - 他没有添加/删除数组元素,所以数组对于这个用例来说很好。
  • @TimBiegeleisen - 问题是他正在删除和添加。 (或替换和添加)。如果您使用典型的 List 迭代器执行此操作,则会导致 CCME。 OTOH,他没有使用标准的List 方法:getElementAtaddElement

标签: java list changelist


【解决方案1】:

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

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

  2. 当你从列表中移除一个元素时,被移除元素之后的所有元素都会移动到不同的位置;即removeElement(i) 导致元素i+1 移动到位置i,元素i+2 移动到i+1 等等。但是......然后你增加i !!

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

如果您打算删除/替换所有匹配的元素,则需要一个嵌套循环。此外,请查看您正在使用的类的 setElementinsertElement 方法。 (很明显,您使用的方法不在 List API 中……但我不知道它是哪个 API。)

最后,我看不出你在哪里尝试这样做:

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

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

【讨论】:

  • listOfUsersModel 是一个 DefaultListModel 对象,我想让我的代码高效,但在一种方法中使用 2 个 for 循环效率不高。此外,DefaultListModel 没有迭代器。我已将 equalsIgnoreCase 更改为包含,因此我正在查看元素数组中的所有元素。
  • 嗯……除非你能保证数组中的位置和模型中的位置总是相同,否则你别无选择,只能使用嵌套循环。
猜你喜欢
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多