如何从HashMap获取值对象大小?

时间:2014-05-05 15:18:49

标签: java object hashmap

我有一个对象地图:

HashMap<Object, Object> map = new HashMap<>();

map.put(1, new String("Hello"));
map.put("two", 12345);
map.put(3, new byte[]{12,20,54});

如何打印每个值对象大小 ??

请帮忙!

2 个答案:

答案 0 :(得分:2)

你可能想回去重新思考你的设计,因为以你的方式混合类型通常是一个坏主意。

话虽这么说,如果这不是您的选择,您需要检查对象的类型,然后打印“&#39; size&#39;对于每一个定义你的事情是否合适:

public void printSize(Object o) {
    if (o instanceof String) {
        String s = (String) o;
        System.out.println(s.length());
    } else if (o instanceof byte[]) {
        byte[] b = (byte[]) o;
        System.out.println(b.length);
    } else if (o instanceof Integer) {
        Integer i = (Integer) o;
        System.out.println(String.valueOf(i).length());
    // and so on for other types
    } else {
        throw new InputMismatchException("Unknown type");
    }
}

答案 1 :(得分:1)

从您给定的设计中,您有一个非常糟糕的选项,即检查对象的当前类型并定义逻辑以了解其size

public int size(Object o) {
    if (o instanceof String) {
        return ((String)o.)length();
    }
    if (o instanceof Object[].class) {
        return ((Object[])o).length;
    }
    if (o instanceof byte[].class) {
        return ((byte[])o).length;
    }
    //and on and on...
    //if something isn't defined, just return 0 or another default value
    return 0;
}

但请注意,这是一个糟糕的方法,因为你的设计很糟糕。如果你解释你真正的问题会更好。更多信息:What is the XY problem?