2017-04-18 57 views
0

我的意思是我给了一个对象数组,如果我要更改的列表中没有给定列表中的某些对象,那么我将它们添加到我的列表中,if我的列表确实有一些对象,给定的列表不会从我的列表中删除。 我试图实现这一点,但它没有奏效。如何动态更改列表

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对象。

+0

如果您打算删除从'List'(或集合),而迭代元素,你应该使用适当的'Iterator'。 –

+0

我认为使用数组不会对你有帮助,试着使用ArrayList –

+0

@ user7790438 - 他没有添加/删除数组元素,所以对于这个用例来说数组就很好。 –

回答

1

我可以看到你的代码的一些问题:

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

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

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

如果您打算删除/替换所有匹配的元素,你需要一个嵌套循环。另外,请查看您正在使用的类的setElementinsertElement方法。 (你都清楚地使用不属于List API的方法......但我无法弄清楚它是API)。

最后,我没有看到你试图做到这一点:

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

要做到这一点,则需要进行第二次飞掠,与另一对嵌套循环...

+0

listOfUsersModel是一个DefaultListModel对象,我想让我的代码高效,但在一个方法中使用2 for循环效率不高。此外,DefaultListModel没有迭代器。我已经改变了equalsIgnoreCase来包含,所以我正在浏览元素数组中的所有元素。 – nexusgeniuz

+0

那么......除非你可以保证数组中的位置和模型中的位置总是**相同,否则你别无选择,只能使用嵌套循环。 –