У меня есть LinkedHashMap<String,Object>
и было интересно, какой самый эффективный способ разместить String
часть каждого элемента в LinkedHashMap
в JList
.Как я могу добавить ключи LinkedHashMap в JList?
ответ
Вы также можете использовать setListData(Vector) метод:
jList1.setListData(new Vector<String>(map.keySet()));
С каждым из setListData
методов, вы делаете копию фактических данных, поэтому изменения в карте не будут отражены в списке. Вместо этого вы можете создать настраиваемый ListModel
и передать его методу setModel
, но поскольку нет способа получить доступ к произвольному элементу из LinkedHashMap
по индексу, это, вероятно, невозможно.
Нашел этот способ, чтобы сделать это сразу после того, как я ответил на вопрос, подумал, что я поместил его здесь для сообщества. Я думаю, что это самый эффективный способ сделать это, но я, безусловно, открыт для большего количества предложений.
jList1.setListData(LinkedHashMap.keySet().toArray());
Если JList не чувствителен к изменениям исходной карты, оригинальный метод, который вы использовали в порядке (лучше, чем с помощью Vector, который имеет дополнительный слой sychronization).
Если вы хотите, чтобы jList изменился при изменении карты, вам придется написать свой собственный ListModel (что не так сложно). Вам также придется выяснить, как узнать, когда карта изменится.
Что вы подразумеваете под оригинальным методом: «лучше, чем использовать Vector?» Мне просто интересно. –
Класс Vector имеет каждый метод синхронизации. Это добавляет небольшую стоимость для каждого вызова. Это не большая разница, но так как другая техника примерно такая же, я рекомендую ее по векторам. –
Если вы не ожидаете обновления JList при добавлении чего-либо на карту, это будет работать. –
Вы также можете использовать метод setListData (Vector): jList1.setListData (новый вектор (map.keySet())); –
спасибо mmyers Я думаю, что я буду использовать этот путь вместо этого. –