删除X对象</object>后,有效地重新排列List <object>

时间:2014-08-17 20:01:35

标签: java

在处理一个小型数据库项目之后,我偶然发现了一个问题。我有一个Student对象,其ID取决于JTable行号(因此没有任何&#39;已同步&#39;与我已存储的List<Student> students < / em>。

删除多个学生对象后,我注意到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中的问题是数据库现在将打印出两个学生的身份证号码1&amp; 2,而不是1&amp; 3 (如列表索引所示)。我想保持JTable以递增的顺序打印S.ID而不是跳转,而是我应该以有效的方式重新排列列表,现在将List索引更改回与JTable中的S.ID相同。

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

1 个答案:

答案 0 :(得分:2)

实际上,当您从ArrayList中删除第i个对象时,删除对象后面的对象的索引会减1。

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

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