Quand utiliserais-je la méthode singletonMap des collections java?

Je ne comprends pas pourquoi vous auriez besoin des collections Java singletonMap ? Est-ce utile dans les applications multithread?

Fondamentalement, cela vous permet de faire ceci:

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

plutôt que ceci:

 Map m = new HashMap(); m.put(key, value); callAPIThatTakesAMap(m); 

ce qui est beaucoup plus intéressant lorsque vous n’avez qu’une seule paire clé / valeur. Cette situation ne se pose probablement pas très souvent, mais singleton() et singletonList() peuvent souvent être utiles.

C’est utile si vous devez passer une carte à un code général (en tant que paramètre ou en tant que résultat d’une méthode) et que vous savez que dans ce cas particulier – mais peut-être pas dans d’autres cas, la carte est transmise au même général code – la carte que vous souhaitez transmettre n’a qu’une seule clé. Dans ce cas, le SingletonMap est plus efficace qu’une implémentation de carte complète et plus pratique pour le programmeur car tout ce que vous avez à dire peut être dit dans le constructeur.

En outre, une implémentation SingletonMap renvoyée par Collections.singletonMap () a une empreinte mémoire plus petite qu’une HashMap classique. Il ne doit contenir que deux champs membres: la clé et la valeur, alors qu’une HashMap conserve un tableau interne d’objects Node plus d’autres champs membres. Donc, si vous créez beaucoup de ces cartes en mémoire, il serait prudent d’utiliser Collections.singletonMap ().

C’est principalement pour la commodité et l’abstraction. Certaines API utilisent une Collection comme argument et il est intéressant de pouvoir convertir facilement des objects en un Set ou une Map .

singletonMap() et singletonList() ont été introduits après singletonSet() dans Java 1.3 car singletonSet() s’est avéré utile.

beaucoup de réponses vous ont dit quand, mais je veux indiquer quand not use it

ne l’utilisez pas si vous voulez put items later on ,

parce que l’implémentation de singletonMap lancera une exception UnsupportedOperationException

Ceci est juste un autre exemple, mais j’ai écrit cette ligne de code:

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

Notez le @Override . L’interface plus généralement peut prendre des cartes de beaucoup de choses; cette instanciation particulière renvoie toujours toujours une carte contenant une chose. Notez également que la clé de la carte est un Enum. Donc, les cartes ne sont jamais supposées être grandes, elles sont juste censées contenir les résultats des actions spécifiées. Dans mon exemple réel, il y a jusqu’à 5 actions, et cette instanciation n’en utilise qu’une.

Pour être complet, EnumSet ou EnumMap est souvent approprié dans ces cas, mais ceux-ci sont encore énervants par rapport au code ci-dessus.