Java 对 class 的不同字段的对象进行计数

Java counting objects of class with different fields

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

您的 class 中的静态 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 字段有 setter,您也需要在那里处理 counter 更新。

一个 Map 来存储每个大小的计数器可能很有用

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
    }
}

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

    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);
       }
    }
}

我建议使用 Map<YourObject, Integer>,您将根据键增加值。对于这个具有大小的 YourObject 应该覆盖 equalshasCode 方法。在此方法中应使用您的尺寸字段来比较 ans return.