Storing a new object as the value of a hashmap?

前端 未结 5 395
灰色年华
灰色年华 2020-12-15 23:33

I am trying to find a way to store a new instance of a class as the value in a Java hashmap. The idea was given to me by a Java instructor in order to create a data storage

相关标签:
5条回答
  • 2020-12-16 00:08

    The problem is that your code only specifies that the values in the map are Object. You know more than that, so tell the compiler that information:

    HashMap<String, InfoStor> mapper = new HashMap<String, InfoStor>();
    mapper.put("NS01", new InfoStor("NS01"));
    ...
    
    InfoStor value = mapper.get("NS01");
    Integer memory = value.getMemory();
    

    Note that it's generally though not always better to use interfaces for the variable types - and you can use the diamond operator for the constructor call, letting the compiler use type inference to fill in the type arguments:

    Map<String, InfoStor> mapper = new HashMap<>();
    mapper.put("NS01", new InfoStor("NS01"));
    ...
    
    InfoStor value = mapper.get("NS01");
    Integer memory = value.getMemory();
    
    0 讨论(0)
  • 2020-12-16 00:20

    Make use of the generics added to java. They help with both compile-time type-checking and they make the casts unnecessary.

      HashMap <String, Object> mapper = new HashMap();
      //you will be able to retrieve an object and then cast it to your InfoStore
      InforStore isN01 = (InfoStore)mapper.get("N01");
    
      //this will unfortunately be accepted, even thought it's a bug
      mapper.put("N02", new Integer(0));
    
      ________________________
    
      HashMap <String, InfoStore> mapper = new HashMap();
      //you will be able to retrieve an object and then cast it to your InfoStore
      InforStore isN01 = mapper.get("N01"); //no cast
    
    0 讨论(0)
  • 2020-12-16 00:24

    If you declare your hashmap like so:

    HashMap<String, InfoStor> mapper = new HashMap<String, InfoStor>();
    

    Then when you get an object out of the mapper, it will be an instance of InfoStor (you won't need to cast it or worry about a class cast exception because it's not the rist class.)

    So:

    InfoStor myStor = mapper.get("somekey");
    myStor.getMemory(); // this will work
    

    Otherwise, if you stick with the HashMap<String, Object> you used in your original code, you'll need to cast it before you call the method:

    Object obj = mapper.get("somekey");
    ((InfoStor)obj).getMemory(); // cast is required
    obj.getMemory(); // this will not compile
    

    You should read up on Java generics.

    0 讨论(0)
  • 2020-12-16 00:27

    Youre on the right track...

    Initialise the map as:

    HashMap <String, InfoStor> mapper = new HashMap<String, InfoStor>();
    

    Then after adding objects to the map retrieve them with:

    InfoStor var = mapper.get("NS01");
    System.out.println(var.getMemory());
    
    0 讨论(0)
  • 2020-12-16 00:31

    you can cook something by using array...for example if you can store objects in arrays then use that idea to achieve it in hash map...i dont knw how you design but i once got stuck in that and made through like this

    example...

    class princess{

    int age;
    
    public princess(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
    

    }

    public class hashmaptest {

    public static void main(String[] args) {
      princess[] p=new princess[10];
      HashMap scores = new HashMap();
      scores.put("a",new princess(6));
      scores.put("b",new princess(7));
    
      p[0]=(princess)scores.get("a");
       System.out.println(p[0].getAge());
      p[0]=null;
       p[0]=(princess)scores.get("b");
    
      System.out.println(p[0].getAge());
    
    
    
    }
    

    }

    0 讨论(0)
提交回复
热议问题