Используя словарь Java, использовать хэш-таблицу?

Я немного удивлен, что никто не спросил об этом конкретном случае, потому что это какая-то странная несогласованность в стандартных библиотеках Java:

Я использую свинг JSliders с пользовательскими метками; единственный библиотечный вызов, доступный для назначения меток: setLabelTable(Dictionary labels)

Но Dictionary — это абстрактный класс, и его единственный известный подкласс в стандартной библиотеке — это Hashtable, на который API и различные IDE жалуются, потому что он «устарел».

Очевидно, что нужно просто использовать Hashtable, но мне интересно две вещи:

  1. Есть ли лучший способ подойти к этому?
  2. Если Hashtable является единственным пригодным для использования классом для этого (на мой взгляд) достаточно важного библиотечного вызова, на каком основании он «устарел»?

Спасибо!


person bcr    schedule 17.07.2012    source источник


Ответы (3)


Причина, по которой Hashtable устарела, заключается в потому что она была заменена на Hashmap.

Однако для назначения меток setLabelTable «недостатки» Hashtable не представляют проблемы.

person DVK    schedule 17.07.2012
comment
После проверки документации по Java HashMap и HashTable, я не вижу, где там написано, что HashTable заменили на HashMap (даже в предложенной ссылке нет), вместо этого HashMap имеет больше преимуществ, чем использование HashTable, также если вам нужна синхронизированная карта, вы должны использовать ConcurrentHashMap. Если я ошибаюсь, пожалуйста, просветите меня или опубликуйте, что Java рекомендует прекратить использование HashTable. - person Luiggi Mendoza; 18.07.2012
comment
@LuiggiMendoza - он не был официально заменен в соответствии с Sun / Oracle; однако консенсус StackOveflow ясно показывает, что HashMap является лучшей общей заменой. - person DVK; 18.07.2012
comment
Спасибо, это похоже на то, что я сделал, но все же я не чувствую, что должен говорить, что HashMap является заменой HashTable, по крайней мере, Sun / Oracle еще не сделали это официально (пока). - person Luiggi Mendoza; 18.07.2012
comment
Тааак... что мы используем вместо словаря, чтобы изменить метку JSlider? Я попытался отправить HashMap‹Integer, JLabel› в качестве аргумента, и это, очевидно, не сработало, поскольку типы несовместимы. - person Kcits; 06.02.2020

Он устарел, поскольку был заменен на java.util.HashMap. Основные отличия заключаются в том, что методы в HashTable синхронизированы, а HashMap позволяет использовать нулевой указатель в качестве ключа.

Современные версии java прошли долгий путь в производительности неоспариваемых синхронизированных операций, поэтому на самом деле нет проблем с производительностью, которые раньше были. (если вы используете последнюю версию JDK на основной платформе.) Если для API требуется HashTable, используйте ее.

person Affe    schedule 17.07.2012
comment
хорошо, но почему нет реализации setLabelTable, которая принимает HashMap? Может быть, мое замешательство заключается в том, что я не понимаю, что для меня считается устаревшим, потому что номинально сохранять вызовы с устаревшими типами кажется странным. - person bcr; 18.07.2012
comment
На протяжении многих лет Java высоко ценила 100% обратную совместимость. Ожидается, что код, написанный в 1995 году, будет компилироваться и работать с последними средами выполнения, поэтому иногда вы получаете странные вещи в API. Если бы они изменили метод, чтобы получить java.util.Map, старые файлы JAR больше не будут работать в последней среде выполнения. - person Affe; 18.07.2012

Dictionary был "заменен" на Map, а HashTable на HashMap.
HashTable работает медленно, поскольку он синхронизирован, поэтому HashMap является нормальным выбором.
Я не уверен, почему вы беспокоитесь о том, что используете "устаревшую" структуру данных, поскольку если вы должны использовать JSlider, вы должны использовать HashMap.
Возможно, вам следует задаться вопросом, какие виджеты использовать вместо этого? Просто мысль...

person Cratylus    schedule 17.07.2012
comment
Я не уверен, что понимаю вашу рекомендацию о том, какой виджет использовать. Я хочу использовать слайдер. Вы предлагаете альтернативу свингу? - person bcr; 18.07.2012