我尝试循环遍历 jList 中所选项目的索引以删除它们。
int[] indexoptio;
indexoptio = this.list_optio.getSelectedIndices();
for (int i=0; i<indexoptio.length ; i++) {
this.optio.remove(indexoptio[i]);}
this.list_optio.setModel(optio);
它工作完美,除非我的列表中只有 2 项。当我选择这两项时,它只会删除其中一项...
最佳答案
这是因为在处理引用数据结构的一组未更改的索引时更改了数据结构。使用示例更容易显示这一点。假设您有一个包含 3 个元素的列表 items
:
["item1", "item2", "item3"]
并且您想要删除第 1 项和第 3 项,请使用上面实际执行的代码:
items.remove(0);
items.remove(2);
第一次删除后,列表变成了这样:
["item2", "item3"]
看看“item3”
现在是在位置1,而之前是在位置2吗?
您选定的索引列表引用原始数据列表,但在第一个删除列表发生更改之后。
我认为以下内容应该适合您:
int[] indexoptio;
indexoptio = this.list_optio.getSelectedIndices();
for (int i=0 ; i<indexoptio.length ; i++) {
this.optio.remove(indexoptio[i]-i);
}
this.list_optio.setModel(optio);
每次迭代,原始列表的大小都会减少 1,并且一些元素已下移,因此通过减去循环计数器 (indexoptio[i]-i
),它应该保持值同步
关于java - 循环遍历 jList 索引以删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838197/