Le stockage d'un nouvel objet que la valeur d'une table de hachage?
Je suis en train d'essayer de trouver un moyen de stocker une nouvelle instance d'une classe en tant que valeur en Java table de hachage. L'idée m'a été donnée par un Java instructeur afin de créer une structure de stockage de données qui pourrait être utilisée pour un programme que je suis en train de travailler.
L'idée qu'il a recommandé à moi a été d'utiliser une table de hachage qui est stocké le nom de l'ordinateur comme la clé et la valeur d'une nouvelle instance de la classe InfoStor.class. InfoStor contient des méthodes telles que getName(), setName(), getMemory()...
J'ai la classe et de la méthode assez bien à l'installation d'une base de test pour voir si cela fonctionnerait ou pas. Le problème, je suis en cours d'exécution en est je ne peut pas comprendre comment utiliser les méthodes à l'intérieur de InfoStor une fois que j'ai créé une nouvelle entrée dans la table de hachage.
C'est le code que j'ai jusqu'ici;
VMware.class
import java.util.HashMap;
public class VMware {
public static void main(String[] args) {
HashMap <String, Object> mapper = new HashMap();
mapper.put("NS01", new InfoStor("NS01"));
//mapper.get("NS01").
}
}
InfoStor.class
public class InfoStor {
private String vmName;
private String platform;
private Integer memory;
public InfoStor (String name) {
vmName = name;
}
String getName(){
return vmName;
}
void setPlatform(String p){
platform = p;
}
String getPlatform(){
return platform;
}
void setMemory(Integer m){
memory = m;
}
Integer getMemory(){
return memory;
}
}
Ce que je suis en train d'accomplir, c'est quelque chose comme ceci (idée de base).
Object var = mapper.get("NS01");
System.out.println(var.getMemory());
Je suis aller sur ce de la mauvaise façon? Toute aide est appréciée grâce.
HashMap<String, InfoStor>
au lieu de simplement HashMap<String, Object>
de sorte que vous n'aurez pas à jeter en arrière pour InfoStor
avant d'appeler getMemory()
.Si la mémoire est quelque chose qui ne peut pas être nulle, je voudrais utiliser un int et le forcer à définir lorsque l'objet est construit (idem pour la plate-forme) je voudrais aussi nullcheck des trucs dans le constructeur.
vous rendez-vous compte que vous avez une réponse par Jon Skeet? 🙂
OriginalL'auteur ianc1215 | 2012-08-23
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que votre code ne spécifie que les valeurs de la carte sont
Object
. Vous en savez plus, afin de dire au compilateur que l'information:Noter que c'est généralement mais pas toujours préférable d'utiliser des interfaces pour les types de variables - et vous pouvez utiliser le diamant de l'opérateur pour l'appel du constructeur, de laisser le compilateur d'utiliser l'inférence de type pour remplir les arguments de type:
Quelques années plus tard, mais il peut aider. Normalement, vous instanciez à l'encontre d'une interface. Dans votre exemple, il serait Map<String, InfoStor> = new HashMap<>(). Dans ce sens, le code est plus souple. Vérifier stackoverflow.com/questions/383947/...
Je suis bien conscient de cela, mais je me concentre sur la partie que l'OP n'était pas clair à propos, plutôt que de présenter les différences inutiles. Je vais ajouter cette option si.
OriginalL'auteur Jon Skeet
Si vous déclarez votre table de hachage comme suit:
Puis, quand vous obtenez un objet en dehors de la mappeur, il sera une instance de
InfoStor
(vous n'aurez pas besoin de le lancer ou de se soucier d'une classe cast exception parce que c'est pas le rist classe.)Donc:
Sinon, si vous vous en tenez à la
HashMap<String, Object>
vous avez utilisé dans votre code, vous aurez besoin de le lancer avant d'appeler la méthode:Vous devriez lire sur Java génériques.
OriginalL'auteur Roddy of the Frozen Peas
Faire usage des médicaments génériques, ajoutée à java. Ils aident à la fois le type de compilation-la vérification et le jette inutiles.
OriginalL'auteur Razvan
Vous êtes sur la bonne voie...
Initialiser la carte:
Puis, après ajout d'objets à la carte de les récupérer avec:
OriginalL'auteur StephenMeyer
vous pouvez faire cuire quelque chose en utilisant la matrice de...par exemple, si vous pouvez stocker des objets dans des tableaux puis utiliser cette idée pour le réaliser dans de hachage de la carte...je n'ai pas knw la façon dont vous concevez mais une fois, j'ai coincé dans et à travers comme ce
exemple...
classe princesse{
}
public class hashmaptest {
}
OriginalL'auteur adenmahat