Какой-либо недостаток к использованию произвольных объектов как Карта вводит Java?

Не могли бы вы пройти через объяснение кода, используемого вами. Это может помочь вам понять концепцию массива.

awk '                      ##Starting awk program from here.
NR==FNR{                   ##Checking condition FNR==NR which will be TRUE once first Input_file named file1 is being read.
  a[$1]=$2                 ##Creating an array named a whose index is $1 of current line and value is $2(2nd field) of current line.
  next                     ##next will skip all further statements from here.
}                          ##Closing BLOCK for FNR==NR condition here.
$2 in a{                   ##Checking condition(which will be executed only when 2nd Input_file named file2 is being read.
  print a[$1]              ##Now printing value of array a whose index is $1 of current line.
}                          ##Closing BLOCK for $2  in a condition here.
' file1 file2 >> output    ##Mentioning Input_file names and placing output into output file here.

Дополнительное объяснение концепции Array:

  • Что делает a[$1]=$2?: Это означает, что мы создаем массив с именем a, индекс которого (по которому распознается любой элемент) и его значением является $ 2 (2-е поле текущей строки).
  • Пример a[$1]=$2: Давайте возьмем пример 0_1 apple из 1-го Input_file, где массив будет храниться как a[0_1]=apple, как объяснено выше, его индекс равен 0_1 и значение - яблоко.
  • Что делает условие $2 in a?: Эти операторы на самом деле являются условием, которое проверяет, поступает ли $ 2 текущей строки в массив a (конечно, он проверяет все индексы массив a и сравните эту строку с ними, если они совпадают или нет), если найдено какое-либо совпадение, выведите значение массива a, значение которого равно a[$1]
6
задан starblue 11 March 2009 в 15:32
поделиться

8 ответов

  1. Ключ должен реализовать .equals() и .hashCode() правильно
  2. Ключ не должен быть изменен всегда, который изменяется, это .hashCode() оцените, в то время как это используется в качестве ключа
  3. Идеально любой объект, используемый в качестве ключа a HashMap должно быть неизменным. Это автоматически гарантировало бы это 2. всегда сохраняется.
  4. Объекты, которые могли иначе быть GCed, могли бы иметься в наличии, когда они используются в качестве ключа и/или значения.
22
ответ дан 8 December 2019 в 02:41
поделиться

Вы могли использовать стандартную Карту, но выполнение, таким образом, Вы сохраните сильные ссылки к своим объектам в Карте. Если на Ваши объекты ссылаются в другой структуре, и Вам нужна Карта только для соединения их, рассматривают использование WeakHashMap.

И BTW, который Вы не должны переопределять, равняется и хэш-код, если Вы не должны рассматривать несколько экземпляров объекта как равные...

1
ответ дан 8 December 2019 в 02:41
поделиться

У меня есть два вида объектов в моем приложении, где каждый объект одного вида имеет точно один соответствующий объект другого вида.

Это действительно походит на - отношения и таким образом могло быть реализовано с помощью простого атрибута.

7
ответ дан 8 December 2019 в 02:41
поделиться

Это зависит от реализации карты, которую Вы выбираете:

  • Использование HashMap равняется () и хэш-код (). По умолчанию (в Объекте) они основаны на объектных идентификационных данных, которые будут работать хорошо, если Вы не сериализируете/десериализуете. С надлежащей реализацией равняется () и хэш-код () на основе содержания объекта, у Вас не будет проблем, пока Вы не изменяете его, в то время как это - ключ в карте хеша.

  • TreeMap использует compareTo (). Нет никакой реализации по умолчанию, таким образом, необходимо обеспечить тот. Те же ограничения применяются что касается реализации хэш-кода (), и равняется () выше.

3
ответ дан 8 December 2019 в 02:41
поделиться

Любой объект может быть ключом карты. Важная вещь здесь состоит в том, чтобы удостовериться, что Вы переопределяете .equals () и .hashCode () для любых объектов, которые будут использоваться в качестве ключей карты.

Причина Вы делаете это, состоит в том, что, если Вы не делаете, равняется, будет понят как объектное равенство и единственный способ, которым Вы сможете найти, "равные" ключи карты должен иметь дескриптор к самому исходному объекту.

Вы переопределяете хэш-код, потому что это должно согласовываться с, равняется. Это - то, так, чтобы объекты, которые Вы определили, как равняется хешу тождественно.

0
ответ дан 8 December 2019 в 02:41
поделиться

Я могу использовать объект в качестве ключа в Карте, раздать ее, иметь ее находящийся в другом наборе также и получить его партнера из Карты какое-либо время?

Да, без проблем здесь вообще.

После того, как объект создается, все, что я раздаю, идентификатор, правильно? Так, вероятно, без проблем там. Что, если я сериализирую и десериализовываю ключ?

Правильно, Вы только раздаете ссылку - они все укажут на тот же фактический объект. Если бы Вы сериализируете или десериализовываете объект, который создал бы новый объект. Однако, если Ваши объектные реализации равняются и хэш-код правильно, необходимо все еще смочь использовать новый десериализованный объект для получения объектов из карты.

Какие-либо другие протесты? Я должен использовать что-то еще для корреляции объектных пар, как число, которое я генерирую сам?

Что касается Протестов, да, Вы не можете изменить ничего, что вызвало бы хэш-код объекта измениться, в то время как объект находится в Карте.

1
ответ дан 8 December 2019 в 02:41
поделиться

Места ошибки являются хэш-кодом, и равняется функциям. Если они не произведут последовательные и надлежащие возвращаемые значения, то Карта будет вести себя странно. Эффективный Java имеет целый раздел по ним и высоко, настоятельно рекомендован.

0
ответ дан 8 December 2019 в 02:41
поделиться

Вы могли бы считать Набор Google BiMap.

0
ответ дан 8 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: