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

Java计算具有不同字段的类的对象,java,object,counting,Java,Object,Counting,我有一个简单的类,只有一个字段size。我正在创建size=2和size=3等的对象。。我想数一数每一个大小的物体。类似于构造函数中递增的private static int counter=0,但对于每种对象,我都需要许多计数器(比如数组?)。如何操作?可以使用类中的静态贴图来累积每个对象的大小: public class MyObject { private static Map<Long, Long> counter = new HashMap<>();

我有一个简单的类,只有一个字段
size
。我正在创建
size=2
size=3
等的对象。。我想数一数每一个大小的物体。类似于构造函数中递增的
private static int counter=0
,但对于每种对象,我都需要许多计数器(比如数组?)。如何操作?

可以使用类中的静态
贴图来累积每个对象的大小:

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);
        }
    }
}
公共类MyObject{
私有静态映射计数器=new HashMap();
私人长码;
公共MyObject(长尺寸){
这个。大小=大小;
如果(!计数器容器(1l))
{
计数器放置(尺寸,1l);
}
其他的
{
counter.put(大小,counter.get(大小)+1);
}
}
}
如果您有
大小
字段的设置器,您还需要处理
计数器
更新。

存储每个大小计数器的映射可能会很有用

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
    }
}
公共类MyObject{
私有静态映射计数器=new HashMap();
私有整数大小;
公共MyObject(整数大小){
这个。大小=大小;
整数sizeCounter=counters.get(大小);
if(sizeCounter==null){
sizeCounter=0;
}
计数器。put(大小,++sizeCounter);
}
公共静态整数getSizeCounter(整数大小){
整数sizeCounter=counters.get(大小);
if(sizeCounter==null){
sizeCounter=0;
}
返回大小计数器;
}
}
公开课考试{
公共静态void main(字符串[]args){
MyObject mo11=新的MyObject(1);
MyObject mo12=新的MyObject(1);
MyObject mo13=新的MyObject(1);
MyObject mo2=新的MyObject(2);
MyObject mo3=新的MyObject(3);
System.out.println(MyObject.getSizeCounter(1));//打印3
System.out.println(MyObject.getSizeCounter(2));//打印1
System.out.println(MyObject.getSizeCounter(3));//打印1
System.out.println(MyObject.getSizeCounter(4));//打印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);
       }
    }
}
公共类MyObject{
私有静态HashMap map=newhashmap();
私有整数大小;
公共MyObject(整数大小){
这个。大小=大小;
if(map.containsKey((整数)大小)){
整数sizeCount=map.get((整数)大小);
map.put((整数)大小,sizeCount+1);
}否则{
map.put((整数)大小,1);
}
}
}

我建议使用
Map
,您将根据键增加值。为此,具有大小的对象应该覆盖
equals
hasCode
方法。此方法中应使用您的大小字段来比较ans返回。

您可以添加代码吗?如果没有完整的代码,就不太清楚了解如何使用地图。这不是OP的要求。他/她想要一个柱状图:每种尺寸的对象数量:例如,2个尺寸为3的对象,7个尺寸为5的对象。回答错误!-在本例中,
计数器
是所有已创建对象大小的总和。哎呀,从帖子中我不清楚其意图。更新答案。谢谢!,但如何读取指定大小对象的计数器值呢?我已经更新了答案。如果您需要读取所有大小的计数器,然后添加一个新的getter返回计数器映射,然后在映射映射上迭代,这对我来说是一件非常新鲜的事情,我如何调用
getSizeCounter()
方法?我需要它来控制可以创建的指定大小的对象的限制。我已经更新了答案。我已经将
getSizeCounter()
方法设置为静态,这样就可以在不需要MyObject类实例的情况下访问它。它成功了,谢谢您的时间。明天我将完成我的项目,希望不会再有任何麻烦:)