我有一个带有一个字段size
的简单类。我正在创建size = 2
和size = 3
等对象。我想计算每个尺寸的每个对象。像private static int counter = 0
这样的东西在构造函数中增加了,但是对于每种对象,我都需要很多计数器(例如数组?)。我该怎么办?
答案 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应该覆盖equals
和hasCode
方法。您的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
更新。