java - 删除 X 个对象后有效地重新排列 List<Object>

标签 java

在完成一个小型数据库项目后,我偶然发现了一个问题。我有一个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/

相关文章:

java - 变量声明后的这个静态 block 是什么?

java - java中如何将所有特殊字符替换为另一个字符?

Java高效文件写入: String concatentation versus extra call to write()

java - NetBeans 8.0 + GWT 2.6+

java.net.URL 构造 URL 时出现错误?

java - 在 JAVA 中解释这种泛型行为

java - 需要帮助纠正 Java 中 GT06 GPS 设备的登录响应

java - 使用 postgresql 连接到 Wildfly 上的数据库时出现问题

java - .NET 是否像 Java 声称的那样是一次编写,随处运行 (WORA) 平台?

java - 调整选项卡内容的大小