繁体   English   中英

有效地重新排列列表 <Object> 删除X对象后

[英]Efficiently re-arrange a List<Object> after removing X objects

在完成一个小型数据库项目之后,我偶然发现了一个问题。 我有一个Student对象,其ID取决于JTable行号(因此,没有与我存储的List<Student> students “同步”的东西)

删除多个Student对象后,我会注意到list.get(int index)JTable#getRow(int row) 经过一些个人工作之后,我提出了以下建议。


public class ListIDTest {
public static void main(String[] args) {
    List<Object> objects = new ArrayList<>();
    objects.add(new Object("First", 1));
    objects.add(new Object("Second", 2));
    objects.add(new Object("Third", 3));
    String temp = JOptionPane.showInputDialog(null, 
            "ID", 
            "Remove", 
            JOptionPane.INFORMATION_MESSAGE);
    objects.remove(Integer.parseInt(temp) - 1);
    for(Object o : objects){
        System.out.println("Object name: " + o.getName());
        System.out.println("Object ID: " + o.getId());
    }
  }
}

情况一:

输入3

输出: Object name: First Object ID: 1 Object name: Second Object ID: 2

情况二:

输入2

输出: Object name: First Object ID: 1 Object name: Third Object ID: 3


情况2的问题在于,数据库现在将打印两个S.ID为1和2的学生,而不是1和3 (因为列表索引为) 我想让JTable以递增的顺序打印S.ID而不是跳转,相反,我应该以一种有效的方式重新排列列表,以便现在将List索引改回与JTable中的S.ID相同。

我显然可以声明一个新的List<Student> temp并将当前列表添加到其中,然后保存该集合,但是如果我说200-300个学生〜,我认为这不是行之有效的方法。 有什么建议么?

实际上,当您从ArrayList删除第i个对象时,被删除的对象之后的对象的索引将减少一。

因此,如果将循环更改为:

for(int i=0;i<objects.length;i++){
    Object o = objects.get(i);
    System.out.println("Object name: " + o.getName());
    System.out.println("Object ID: " + i);
}

您会得到:

对象名称:第一
对象ID:0
对象名称:第三
对象ID:1

如果您希望打印的ID为1和2,只需打印i+1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM