Bonjour,
Je souhaiterais utiliser une HashMap donc les clé seraient de type MultiKey. Cependant, il serait nécessaire que les objets utilisés pour définir les MultiKey ne soient pas clonés. Je cherche à savoir si cela est possible ou non.
Pour rendre les choses plus claires. Voici un petit exemple.
J'ai une première classe Tableau qui contient un tableau d'entiers de grande taille (et qui prend donc une certaine place en mémoire) :
J'ai ensuite, une deuxième classe contenant un attribut de type ArrayList<Tableau>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Tableau{ private int[][] tableau; ... }
Je souhaiterais avoir une structure de données me permettant de stocker une distance entre tous les éléments de arrayListDeTableau. C'est pourquoi j'ai pensé à une HashMap dont la clé serait un couple d'objets Tableau. Je pourrais utiliser cette HashMap de la façon suivante pour ajouter ou récupérer un élément :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class ArrayDeTableaux{ private ArrayList<Tableau> arrayListDeTableau; ... }
Comme les objets Tableau sont coûteux en espace mémoire, je souhaiterais qu'ils ne soient pas dupliqués lors de la création du MultiKey ou de l'ajout dans la HashMap.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 HashMap<MultiKey, Integer> distances = new HashMap<MultiKey, Integer>(); Tableau t1 = new Tableau(); Tableau t2 = new Tableau(); // Ajouter un element distances.put(new MultiKey(t1, t2), 10); // ie la distance entre t1 et t2 est egale a 10 // Recuperer un element System.out.println("Distance entre t1 et t2 = " + distances.get(new MultiKey(t1, t2)));
Est-ce que vous pourriez me dire si une utilisation telle que celle de l'exemple du dessus passera uniquement par des références ou si cela entraînera le clonage d'objets Tableau ?
Le cas échéant, y aurait-il une façon qu'il n'y ai pas de clonage ? (dans la javadoc de MultiKey, il est fait mention de clonage mais je ne suis pas sûr de bien comprendre -> lien)
Merci d'avance pour votre attention ! Si quelque chose n'est pas clair, n'hésitez pas à me demander de préciser certains points.
Partager