JTableから拡張するのではなく、カスタムテーブルを作成しましたが、約4.000.000文字列データ(10%uniq文字列)の膨大な量のデータがあります。今、私はこのように見えるインデックスを作成してインデックスを付けます:
すべての列を作成してインデックスを作成します。ユーザーがテーブルのライブ検索機能を使用するときに、データをマージするためにツリーセットを使用します。
索引:
列を表すArrayList:
列1 | 列2| 列3| 列
4arraylistの各要素には、インデックスを表すHasMapが含まれています。
キー->データ文字列
値->値は、TreeSet内にこのインデックスが含まれる行を表します。
例:
Name Column:
Emma
John
Doe
Emma
Walker
Emma
Doe
HashMap(Emma) -> 0, 3, 5
private void buildIndex()
{
if (monitorModel.getMessageIndex() == null)
{
ArrayList<HashMap<String, TreeSet<Integer>>> messageIndex = new ArrayList<>(filterableColumn.length);
for (int i = filterableColumn.length; i >= 0; i--)
{
HashMap<String, TreeSet<Integer>> hash = new HashMap<>();
messageIndex.add(hash);
}
// create index for every column
for (int i = monitorModel.getParser().getMyMessages().getMessages().size() - 1; i >= 0; --i)
{
TreeSet<Integer> tempList;
for (int j = 0; j < filterableColumn.length; j++)
{
String value = StringPool.getString(getValueAt(i, j).toString());
if (!messageIndex.get(j).containsKey(value))
{
tempList = new TreeSet<>();
messageIndex.get(j).put(value, tempList);
}
else
{
tempList = messageIndex.get(j).get(value);
}
tempList.add(i);
}
}
monitorModel.setMessageIndex(messageIndex);
}
}
このソリューションは不可能な500MBのヒープサイズを使用しますが、このコードを最適化するにはどうすればよいですか?