Почему Java DefaultTableModel использует Vector? - PullRequest
8 голосов
/ 28 апреля 2011

Я знаю, что мы должны использовать поток AWT для всех операций обновления модели таблицы.Под одним потоком AWT любая модель стола будет поточно-ориентированной.Почему DefaultTableModel выбирает потокобезопасный вектор как структуру данных, которая медленнее, чем другие структуры данных, такие как ArrayList?

Ответы [ 4 ]

7 голосов
/ 28 апреля 2011

Swing впервые появился до Java 1.2, поэтому до ArrayList было доступно.К сожалению, API для DefaultTableModel раскрывает тот факт, что он использует Vector, поэтому изменение его сейчас было бы обратно несовместимым.

Это как раз та причина, по которой стоит задуматься об инкапсуляцииосторожно - это позволит вам изменить внутренние органы позже.(По общему признанию, получить правильную сериализацию было бы интересно, но это история для другого дня ...)

5 голосов
/ 28 апреля 2011

Swing был доступен, но не включен в Java 1.1. List / ArrayList была введена в 1.2. Жаль, потому что Swing мог бы потратить немного времени, прежде чем заблокировать API.

2 голосов
/ 28 апреля 2011

Причина уже была объяснена выше (Swing существовал до библиотеки java.util Collections).

Суть такова: никогда не используйте DefaultTableModel, а скорее создавайте свои собственные (на основена AbstractTableModel).

1 голос
/ 28 апреля 2011

Я собираюсь догадаться, что класс DefaultTableModel действительно был разработан до Framework коллекций (который включает в себя класс ArrayList)введен в Java - следовательно, класс DefaultTableModel не был реализован с использованием классов, представленных как часть The Collections Framework.

Вот несколько фактов:

Кроме того, использование Vector в качестве базовой структуры данных классом DefaultTableModel является подробностью реализации, поскольку сам интерфейс TableModel не делает этого.не полагайтесь на использование Vector.

...