Java计算具有不同字段的类的对象

时间:2018-10-25 18:18:02

标签: java object counting

我有一个带有一个字段size的简单类。我正在创建size = 2size = 3等对象。我想计算每个尺寸的每个对象。像private static int counter = 0这样的东西在构造函数中增加了,但是对于每种对象,我都需要很多计数器(例如数组?)。我该怎么办?

4 个答案:

答案 0 :(得分:2)

一个地图来存储每种尺寸的计数器可能会有用

public class MyObject {
    private static Map<Integer, Integer> counters = new HashMap<>();

    private int size;

    public MyObject(int size) {
        this.size = size;
        Integer sizeCounter = counters.get(size);
        if (sizeCounter == null) {
            sizeCounter = 0;
        }
        counters.put(size, ++sizeCounter);
    }

    public static Integer getSizeCounter(Integer size) {
        Integer sizeCounter = counters.get(size);
        if (sizeCounter == null) {
            sizeCounter = 0;
        }
        return sizeCounter;
    }
}

public class Test {
    public static void main(String[] args) {
        MyObject mo11 = new MyObject(1);
        MyObject mo12 = new MyObject(1);
        MyObject mo13 = new MyObject(1);
        MyObject mo2 = new MyObject(2);
        MyObject mo3 = new MyObject(3);
        System.out.println(MyObject.getSizeCounter(1)); // prints 3
        System.out.println(MyObject.getSizeCounter(2)); // prints 1
        System.out.println(MyObject.getSizeCounter(3)); // prints 1
        System.out.println(MyObject.getSizeCounter(4)); // prints 0
    }
}

答案 1 :(得分:0)

您可以像这样使用静态哈希图,

    public class MyObject {
    private static HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

    private int size;

    public MyObject(int size) {
       this.size = size;
       if(map.containsKey((Integer)size)){
           Integer sizeCount = map.get((Integer)size);
           map.put((Integer)size, sizeCount+1);
       }else{
          map.put((Integer)size, 1);
       }
    }
}

答案 2 :(得分:0)

我建议使用Map<YourObject, Integer>,您将根据密钥增加值。为此,具有大小的YourObject应该覆盖equalshasCode方法。您的size字段应在此方法中用于比较返回值。

答案 3 :(得分:-2)

您班级中的静态Map可用于累加每个对象的大小:

public class MyObject {
    private static Map<Long, Long> counter = new HashMap<>();

    private long size;

    public MyObject(long size) {
        this.size = size;
        if(!counter.containsKey(1l))
        {
            counter.put(size, 1l);
        }
        else
        {
            counter.put(size, counter.get(size) + 1);
        }
    }
}

如果您有size字段的设置器,则也要在那里处理counter更新。