Когда я буду использовать Java коллекции singletonMap метод?



Я не понимаю, зачем вам нужны коллекции java singletonMap?
Это полезно в многопоточных приложениях?

742   6  

6 ответов:

в принципе, это позволяет сделать это:

callAPIThatTakesAMap(Collections.singletonMap(key, value));

вместо этого:

Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);

что гораздо приятнее, когда у вас есть только одна пара ключ/значение. Такая ситуация, наверное, возникает не очень часто, но singleton() и singletonList() может часто быть полезна.

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

кроме того, реализация SingletonMap возвращается коллекциями.singletonMap () имеет меньший объем памяти, чем обычная хэш-карта. Он должен содержать только два поля-члена: ключ и значение, тогда как HashMap поддерживает внутренний массив объектов узла плюс другие поля-члены. Так что если вы создаете много из этих карт в памяти было бы разумным выбором использовать коллекции.singletonMap ().

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

singletonMap() и singletonList() на самом деле, после singletonSet() в Java 1.3, потому что singletonSet() оказалась полезной.

многие ответы сказали вам, когда, но я хочу указать, когда not use it

Не использовать если вы хотите put items later on,

потому что поставил реализацию singletonMap бросит UnsupportedOperationException

это только один пример, но я написал эту строку кода:

@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
    return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}

Примечание @Override. Интерфейс в более общем виде может принимать карты многих вещей; этот конкретный экземпляр просто всегда возвращает карту, содержащую одну вещь. Также обратите внимание, что ключом к карте является перечисление. Таким образом, карты никогда не должны быть большими, они просто должны содержать результаты тех действий, которые указаны. В моем реальном примере есть до 5 действий, и только этот экземпляр использует один из них.

на EnumSet или EnumMap часто подходит в этих случаях, но они все еще раздражающе многословны по сравнению с приведенным выше кодом.

Comments

    Ничего не найдено.