1

次の状況:rowindexを持つデータのコンテナーが必要です。現在、tablemodels内で通常のArrayListを使用し、tablerownumbersを手動で更新しています(そのコンテナー内でデータを追加、削除、移動した後、それらを更新し続けるために、クレイジーなアルゴリズムを使用しています。

これらのテーブル行を更新する3番目のバグを見つけた後、最終的に別のコンテナーを使用してそれらを自動的に更新することを考えました。私の最初の考えは、LinkedListを使用することでした。私が嫌いなのは、LinkedList内でアイテムを削除/再読み込みせずに移動できないことですが、それでも満足のいくようです。

Rowheader自体は独自のテーブルであり、両方の同期を維持するために、イベントごとに更新する必要があります。

RowHeaderの例

あなたが代替案を推薦することができるかどうか、ただ疑問に思います。では、どのような容器を使いますか?

ありがとう、ymene

4

1 に答える 1

2

質問を完全に理解しているかどうかはわかりません。ただしList<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();
        }
    }
    ...
}

LinkedListのインデックス付きアクセスはO(n)ではなくO(1)であるため、ArrayListはLinkedListよりもはるかに効率的です。

于 2012-06-26T11:59:43.093 に答える