Когда я буду использовать Java коллекции singletonMap метод?
Я не понимаю, зачем вам нужны коллекции java singletonMap?
Это полезно в многопоточных приложениях?
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