7 votes

Mappings et primitives Java

Je souhaite créer un mappage qui prend un String comme clé et un primitif comme valeur. J'ai consulté la documentation Java et je n'ai pas vu que Primitive était un type de classe, ou qu'ils partageaient une sorte de classe enveloppante.

Comment puis-je contraindre la valeur à être une primitive ?

Map<String, Primitive> map = new HashMap<String, Primitive>();

8voto

khachik Points 12589

Autoboxing Java permet de créer des cartes sur Long, Integer, Double et de les faire fonctionner à l'aide de valeurs primitives. Par exemple :

java.util.HashMap<String, Integer> map = new java.util.HashMap<String, Integer>();
map.put("one", 1); // 1 is an integer, not an instance of Integer

Si vous souhaitez stocker dans une carte différents types de primitives, vous pouvez le faire en créant un fichier Map<String, Number> . Permet de stocker des valeurs de BigDecimal , BigInteger , Byte , Double , Float , Integer , Long , Short (et AtomicLong , AtomicInteger ).

En voici un exemple :

Map<String, Number> map = new HashMap<String, Number>();

map.put("one", 1);
map.put("two", 2.0);
map.put("three", 1L);

for(String k:map.keySet()) {
  Number v = map.get(k);
  System.err.println(v + " is instance of " + v.getClass().getName() + ": " + v);
}

4voto

mchr Points 2347

Cherchez sur Google "Java Primitive Maps" et vous trouverez des types spécialisés qui évitent d'avoir recours à l'autoboxing. En voici un exemple : https://labs.carrotsearch.com/hppc.html

Toutefois, en règle générale, vous devriez vous en sortir avec l'autoboxage, comme indiqué dans d'autres réponses.

3voto

jjnguy Points 62123

Vous pouvez procéder comme suit :

Map<String, Integer> map = new HashMap<String, Integer>()

Ensuite, des opérations comme :

map.put("One", 1);

fonctionnera. Le primitif 1 sera encadré automatiquement dans un Integer . De même :

int i = map.get("One");

fonctionnera également parce que le Integer sera automatiquement désencastré dans un int .

Consultez la documentation sur autoboxing et autounboxing .

2voto

Andreas_D Points 64111

Chaque primitive possède une classe enveloppante, comme java.lang.Long para long .

Vous pouvez donc faire correspondre la classe enveloppante à String et, si vous utilisez Java 1.5+, mettez simplement des primitives sur la carte :

 Map<String, Integer> map = new HashMap<String, Integer>();
 map.put("key", 10);
 int value = map.get("key");  // value is 10.

1voto

John Vint Points 19804

Vous utiliserez leur équivalent en boîte.

Map<String,Integer> map = new HashMap<String,Integer>();

Integer est un type encadré immuable de la primitive int. Il existe des types encadrés similaires Short, Long, Double, Float et Byte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X