используя числа с плавающей запятой для ключа карты - PullRequest
4 голосов
/ 20 ноября 2010

после создания нового объекта: Map<Float,Integer> m = new HashMap()<Float,Integer>;

У меня есть массив с "float" числами, которые являются уникальными. Я хочу добавить эти числа с плавающей точкой как m's key! я могу сделать это как: m.put(new Float(a[i]),"cat");?

спасибо

Ответы [ 4 ]

5 голосов
/ 20 ноября 2010

Я бы порекомендовал не использовать числа с плавающей точкой в ​​качестве ключей хэш-карты, если это возможно.Ваши ключи должны точно совпадать при поиске значений, и легко получить числа с плавающей запятой, которые не совсем верны.

2 голосов
/ 20 ноября 2010

Просто взять все ответы вместе.

  1. Упомянутая карта не может принимать строки, поэтому вы не можете сказать m.put (f, "cat")
  2. Вы можете, но не обязательно оборачивать float, используя Float: auto-boxing делает это автоматически, поэтому вы можете просто сказать m.put (a [i], "cat")
  3. Не рекомендуется использовать типы с плавающей точкой (Float и Double) в качестве ключа карты. Это может вызвать проблемы при попытке извлечь значение из карты с помощью метода get (key)
  4. Обратите внимание также, что тип по умолчанию для плавающих констант - double, а не float. Так что будьте осторожны с поплавками, используйте их, только если они действительно вам нужны. В любом случае используйте модификатор float рядом с константами, такими как 3.14f.
0 голосов
/ 02 февраля 2019

Обрезать до заданной точности, чтобы генерировать предсказуемые ключи на основе чисел с плавающей запятой. Пример в JavaScript

const precision = Math.pow(10, 4); // where 4 is number of decimal places to retain
const a = 12.5678912331; b = 13.75324122; c = 21.32112221
const key = '' + Math.floor(a * precision) + '_' + Math.floor(b * precision) + '_' + Math.floor(c * precision);
const aMap = new Map();
aMap.set(key, 'some value');

Бесполезный факт: это взято из кода, используемого для индексации вершин в трехмерных объектах. Устанавливая более низкую точность, это позволяет объединить близлежащие вершины

0 голосов
/ 20 ноября 2010

Вы не можете сделать m.put(new Float(a[i]),"cat");, потому что ваше значение должно быть Integer.Для этого вы должны объявить его как Map<Float,String> m = new HashMap()<Float,String>;.

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