2014-12-31 2 views
0

Я новичок в Enum. Пока я изучаю Enum, я сталкивался с EnumSet и EnumMap. Я понимаю, что при работе с картой и множеством с использованием EnumSet и EnumMap намного лучше, чем хэширование из этого вопроса.Зачем нам нужны Set and Map for Java Enum

Why an EnumSet or an EnumMap is likely to be more performant than their hashed counterparts?

Мой вопрос

В какие сценарии нам нужна карта и набор для Enum в Java?

Меня больше интересует знание практических сценариев.

+0

Если вам нужен именованный флаг, вам понадобится «EnumSet» (гораздо лучше в читаемости, чем при использовании 'int' и бит-магии, например). Если вы хотите присвоить значения или значения по умолчанию/функции значениям перечисления, вам понадобится «EnumMap». –

+0

Ваш вопрос не кристально чист. Вы хотите узнать о сценариях, где EnumMap и EnumSet предпочтительнее HashMap и HashSet, или вы спрашиваете, когда следует использовать EnumMap и когда EnumSet (скажем, потому что вы их путаете)? – Pshemo

+0

Я просто хочу знать, почему или когда нам нужна коллекция (Map and Set) для перечисления. Извините, если мой вопрос запутан. – mvg

ответ

1

Рассмотрим сценарий, в котором вы определяете мухи для каждого объекта формы, как:

public enum SHAPE { 
    TRIANGLE, RECTANGLE, SQUARE, HEXAGON; 
} 

И давайте предположим, что создание объекта для всех этих форм каждый раз огромен. Скажем, он входит в БД и извлекает некоторые данные в конструкторе. Что ты делаешь?

Вы сохраните его в карте с помощью ключа перечислимых и значения в качестве одного объекта времени, а затем с помощью перечисления, вы говорите, попытаться назвать что-то вроде:

public double calculateArea(SHAPE shape) { 
    Figure figure = map.get(shape);//you dont create object but take it from a map 
    return figure.calculate(); 
} 

Для EnumSet, считаете вас есть перечисление с основными цветами, как :

enum COLORS { 
    RED, BLUE, GREEN 
} 

Теперь, если я хочу создать сказать желтый цвет и хотите знать иНГРЕДИЕНТЫ за то же самое, я мог бы использовать EnumSet с двумя цветами, как зеленый и красный. Точно так же я мог хранить несколько наборов с изменениями в соответствии с моими требованиями к цвету.

Это просто, к примеру, цель, но вы можете даже добавить счетчик, чтобы усложнить его, чтобы сказать, сколько из RED, BLUE, GREEN вариантов пикселей вам нужно.

+0

Отлично, что очищает EnumMap :) – mvg

+0

Спасибо. Рад, что это помогло. – SMA

+0

Сценарии EnumSet? – mvg