Java HashMap из HashMap против HashMap из String - PullRequest
1 голос
/ 15 февраля 2012

Я новичок в Java и в настоящее время переписываю код Perl на Java.В Perl у меня есть Hash of Hash вроде

$hashref->{index1}->{index2}->{index3} = $value;

. В этом я храню index1, index2 и index3 в 3 отдельных хешах вместе с вышеуказанным хешем.Также Index1 и index2 имеют тип long, а index3 - String.

Теперь я хочу переписать подобные вещи в Java.Итак, я придумал 2 способа

1)HashMap<Long, HashMap<Long ,HashMap<String,String> >>
2)HashMap<String, String> //In this approach i concatenate index1,index2 and index3 using _ and make a single string

Я хочу знать, какой способ будет эффективен, так как возможно максимум 100 ключей для index1, 300 ключей для index2 и 700 ключей для index3.

1 Ответ

3 голосов
/ 15 февраля 2012

Сначала давайте обсудим # 2

  • Это не работает 100% времени из-за возможной неоднозначности, если строки индекса могут содержать символ разделителя ("_"):

    например. рассмотрим 3 набора индексов: («12», «13_13» и «14») и («12_13», «13» и «14»). Они оба выдают один и тот же составной ключ.

  • Он не допускает простой обработки хэшей 2-го и 3-го уровня в виде структур данных легко .

    например. Вы не можете легко сделать Java эквивалент "keys %{$hash->{index1}}" - найти все ключи для хэша второго уровня, хранящегося в index1. Это выполнимо, но намного сложнее. Или "delete $hash->{index1}".

Если эти 2 соображения вас не беспокоят, использование сцепленного ключа для 1-уровневого HashMap - это нормально.

Если они это сделают, вам нужно сделать # 1 - довольно надежная реализация была опубликована на SO ранее: Msgstr " Java эквивалент хеша Perl ". Обратите внимание, что такая реализация НЕ тривиальна, и поэтому ваш альтернативный подход каскадных индексов 1 уровня является очень хорошей альтернативой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...