在处理一个小型数据库项目之后,我偶然发现了一个问题。我有一个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名学生〜。有什么建议吗?
答案 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
。