У меня есть 2 значения перечисления, представляющих отображение на объект, который я (в настоящее время) моделирую с помощью HashMap со значениями 2 перечисления, которые используются в качестве ключа, а объект является значением.
Это неэффективнопотому что я создаю новый CompositeKey (Enum1 enum1, Enum2 enum2) для каждой комбинации Enum1.values () x Enum2.values ().
Я хотел бы пропустить новый CompositeKey () проблема.
Решение, о котором я сейчас думаю, - это вычисление числовых представлений из 2 перечислений, что-то вроде int numericKey = enum1.ordinal() * 0xFFFF + enum2.ordinal();
, но потом, когда я сделаю map.get(numricKey)
, я все равно буду автоматически боксировать вЦелое число - отсюда и создание новых экземпляров.
Идеальным решением (IMO) было бы внедрение Map (не обязательно должно быть универсальным ...), но я не думаю, что такое существует для Java.
Возможно, есть и другой вариант mapping = new Object[Enum1.values().length][Enum2.values().length]
, который я затем сделаю для поиска Object = mapping[enum1.ordinal()][enum2.ordinal()]
, но это кажется слишком "C'ish".
В любом случае, производительность во время выполнения является наиболее важным аспектом здесь.
Комментарии приветствуются.
Спасибо, Максим.