Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are there any advantages between List<CustomObject> and HashMap <String, Object>

Tags:

java

list

hashmap

I am trying to implement a solution (in Java 1.6) where i need to store some values (for a set of properties) and thinking in three options considering the following three (Any other idea is of course wellcome!)

Option 1

Create a class (call it Property) that can store different type of objects (String, int, boolean...) and and work with the set of properties as a List<Property>

Something like:

private String type; //Store the type of Object
private String name; //Store the name of the property
private String valueStr; //Store the String value
private int valueInt; //Store the int value
private boolean valueBool; //Store the boolean value

I dont really like the idea of having many properties and using only one of them. (only one of the values will be set per property)

Option 2

Use HashMap<String, Object> and parse the type on each case.

Have the good thing that you can get the Property by name

Option 3

Use HashMap<String, Property> Where the String is the name of the property and you can get the value with the name and no need to parse.

Questions are: Which of one you think is the best one? or if none of them are good i would like to hear other ideas

Also is there any performance difference between the List and the HashMap?

Thanks in advance for the help.

like image 644
icrovett Avatar asked Feb 16 '23 17:02

icrovett


1 Answers

I think better is to have a custom Value class like this:

public class MyValue {
    enum Type {
       INT, STRING, BOOL;
    }
    private Type type; //Store the type of Object in Type Enum
    private Object value; //Store the value in Object

    public void setValue(int val) {
       type = Type.INT;
       value = new Integer(val);
    }
    public void setValue(String val) {
       type = Type.STRING;
       value = val;
    }
    public void setValue(boolean val) {
       type = Type.BOOL;
       value = new Boolean(val);
    }

    public String stringVal() {
        // check type to be STRING first
        return (String) value;
    }
    public int intVal() {
        // check type to be INT first
        return ((Integer) value.intValue());
    }
    public boolean booleanVal() {
        // check type to be BOOL first
        return ((Boolean) value.booleanValue());
    }
}

You will need to convert from Object to specific type based on enum Type in your getters.

like image 69
anubhava Avatar answered Apr 06 '23 00:04

anubhava