У меня есть JTable с пользовательской TableModel, которая расширяет AbstractTableModel. Я также использовал встроенную сортировку таблиц, вызвав:
table.setAutoCreateRowSorter(true);
Модель также возвращает правильный класс данных для каждого столбца из вызова getColumnClass (), который из того, что я прочитал, должен обеспечить самую быструю сортировку.
Хотя он работает нормально и действительно является очень быстрым способом сортировки в JTables, он исключительно медленный, когда число строк достигает 5000+ записей. Моя таблица из почти 10000 строк теперь занимает 6-7 секунд для сортировки на довольно мощном компьютере. Но если я сам сортирую данные перед добавлением их в модель с использованием алгоритма сортировки коллекций, это делается за несколько миллисекунд!
Я подозреваю, что встроенный сортировщик запускает много ненужных событий для каждого "обмена" элементов, происходящего в алгоритме сортировщика, даже если перерисовка останавливается до его завершения (встроенный сортировщик, очевидно, запускается в потоке AWT и, следовательно, блокирует весь графический интерфейс / перекрашивание). Я не проанализировал это, глядя на то, что на самом деле происходит в сортировке таблиц.
Я испытываю искушение отбросить весь встроенный сортировщик и просто обнаруживать щелчки заголовка столбца и просто сам сортировать модель перед выполнением fireTableDataChanged (), что и должен был сделать встроенный сортировщик.
Но прежде чем я это сделаю, я пропускаю что-то, что может сделать встроенный сортировщик быстрым?