Java 对 class 的不同字段的对象进行计数
Java counting objects of class with different fields
我有一个简单的 class,只有一个字段 size
。我正在创建 size = 2
和 size = 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 应该覆盖 equals
和 hasCode
方法。在此方法中应使用您的尺寸字段来比较 ans return.
我有一个简单的 class,只有一个字段 size
。我正在创建 size = 2
和 size = 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 应该覆盖 equals
和 hasCode
方法。在此方法中应使用您的尺寸字段来比较 ans return.