2017-04-18 104 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

那麼......除非你可以保證數組中的位置和模型中的位置總是**相同,否則你別無選擇,只能使用嵌套循環。 –