在完成一个小型数据库项目后,我偶然发现了一个问题。我有一个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());
}
}
}
<小时/>
情况一:
Input: 3
Output:
Object name: First Object ID: 1 Object name: Second Object ID: 2
情况二:
<小时/>Input: 2
Output:
Object name: First Object ID: 1 Object name: Third Object ID: 3
情况 2 中的问题是数据库现在将打印 S.ID 为 1 和 2 的两个学生,而不是 1 和 3 (如列表索引所示) 。我想让 JTable 以递增的顺序打印 S.ID,而不是跳转,相反,我应该以有效的方式重新排列列表,现在将列表索引更改回与 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);
}
你会得到:
Object name: First
Object ID: 0
Object name: Third
Object ID: 1
如果您希望打印的 ID 为 1 和 2,只需打印 i+1
。
关于java - 删除 X 个对象后有效地重新排列 List<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353124/