1

以下情况:我需要一个带有 rowindex 的数据容器。目前我们在 tablemodels 中使用普通的 ArrayList 并手动更新 tablerownumbers(使用疯狂的算法,在该容器中添加、删除、移动数据后保持更新。

在发现更新这些表行的第三个错误后,我考虑最终使用不同的容器来自动更新它们。我的第一个想法是使用 LinkedList。我唯一不喜欢的是,在 LinkedList 中,我无法在不删除/读取它们的情况下移动项目,但似乎仍然令人满意。

Rowheader 本身是一个自己的表,需要为每个事件更新,以保持两者同步。

行标题示例

只是想知道,如果你可以推荐替代品。所以我很好奇你会用什么样的容器?

谢谢,伊梅内

4

1 回答 1

2

我不确定我是否完全理解这个问题。但是假设你有一个List<Person>,并且你需要一个显示行号、人名和人姓的表格,你不需要 Person 甚至列表中的任何索引来做到这一点:

public class PersonTableModel extends AbstractTableModel {

    private List<Person> persons;

    public int getRowCount() {
        return persons.size();
    }

    public int getColumnCount() {
        return 3;
    }

    public Object getValueAt(int row, int col) {
        if (col == 0) {
            return row + 1;
        }
        else if (col == 1) {
            return persons.get(row).getFirstName();
        }
        else {
            return persons.get(row).getLastName();
        }
    }
    ...
}

ArrayList 将比 LinkedList 更有效,因为对于 LinkedList,索引访问是 O(1) 而不是 O(n)。

于 2012-06-26T11:59:43.093 回答