Вам нужна синхронизация, предоставляемая классом Vector
? Если нет, то вы не хотите использовать класс Vector
. (Если только JList
разрешено использовать вместо него ArrayList
.) Стоимость бесконтактной синхронизации способ ниже в последних версиях JVM, что ниже, чем раньше. Тем не менее, нет причин использовать ненужную синхронизацию.
Похоже, что Кэти Ван Стоун может ссылаться на эту дополнительную синхронизацию в Vector
.
Примечание тщательно JavaDoc для public JList(Vector<?> listData)
:
Созданная модель ссылается на заданный вектор непосредственно. Попытки изменить вектор после создания списка приводит к неопределенному поведению.
К сожалению, JavaDoc для public JList(Object[] listData)
имеет такое же предупреждение:
Созданная модель ссылается на данный массив напрямую. Попытка изменить массив после построения списка приводит к неопределенному поведению.
Вы должны решить, есть ли вероятность того, что кто-то решит, что Vector
полезно позже в том же способом, и, таким образом, изменяет код так:
Vector vec = new Vector<String>(LinkedHashMap.keySet());
jList1.setListData(vec);
// Other stuff with Vector
vec.add(....); // Adding some data type that fits in the Vector
... или, конечно же, такое же изменение с конструкцией конструктора массива.
Возможно, лучше всегда быть в безопасности и создавать новый вектор/объект ... если вы действительно не можете позволить себе создать один дополнительный объект –
В любом случае вы делаете объект - массив или vectory, это просто вопрос, какой из них более эффективен для итерации и создания. Интуиция говорит массив, но на самом деле тест в порядке. – Yishai
@Yishai: Верно, если вы действительно заботитесь о сроках, а затем профиль его. Но поскольку векторы синхронизированы (и внутренне поддерживаются массивом, верно?), Я был бы удивлен, если бы чистый массив был медленнее. – Eddie