2016-09-16 2 views
1

В настоящее время я борюсь с концепцией наличия Hashtable в качестве значения в паре ключ-значение другого Hashtable.Является ли Hashtable как ценность другого Hashtable рекомендуемым?

Hashtable<Key,Hashtable<Key,Value> table; 

В моем текущем проекте мне требуется способ группировки данных в 2 раза, вроде как узел-структуры (TreeView). Вот простой пример такого рода данных, я хочу хранить:

  • group1
    • element1
    • element2
  • group2
    • element3
    • element4
    • element5

только думает, которая пришла мне в голова использует упомянутый выше Hashtable-конструкт или создание «узел-коллекцию», который будет группа моих данных, как описано. (существует ли такая «сборка узлов» в Java API?)

Благоприятно ли использовать идею Hashtable по идее сборки узлов?

+2

Я имею в виду, что использование 'Hashtable' at * all * - плохая идея; вы должны использовать 'HashMap'. –

ответ

2

Преимущество общих структур заключается в том, что они служат для множества потребностей из коробки, но его недостатком является то, что они имеют низкую читаемость и отсутствие семантики. Сравните эти две декларации:

Hashtable<Key1,Hashtable<Key2,Value2>> 

Hashtable<Key,BoughtItemsMap> 

Этого достаточно для двухуровневой группирующей структуры. Так что лучше даже не представляете, как это было бы на три уровня:

Hashtable<Key1,Hashtable<Key2,Hashtable<Key3,Value3>>> 

Выгодно использовать Hashtable-идею по поводу узла-коллекции-идеи?

Это зависит от ваших потребностей: A Hashtable (или лучше, Map) используется для отображения ключей к значениям. A коллекция, вместо этого не отображается; Просто содержит значения.

Итак, если для 2-го уровня вашей структуры не требуется сопоставление, коллекции должно быть достаточно. Что-то вроде этого:

class MyCollectionOfElements extends ArrayList<Element>{...} 

Map<Key, MyCollectionOfElements> map=new HashMap<Key, MyCollectionOfElements>(); 
3

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

Смежные вопросы