Java подсчитывает объекты класса с разными полями - PullRequest
0 голосов
/ 25 октября 2018

У меня есть простой класс с одним полем size.Я создаю объекты size = 2 и size = 3 и т. Д. Я хочу посчитать каждый объект любого размера.что-то вроде private static int counter = 0 увеличено в конструкторе, но мне нужно много счетчиков (например, массив?) для каждого типа объекта.Как мне это сделать?

Ответы [ 4 ]

0 голосов
/ 25 октября 2018

Я бы предложил использовать Map<YourObject, Integer>, который будет увеличивать значения на основе ключа.И для этого YourObject, который имеет размер, должен переопределить методы equals и hasCode.Ваше поле размера должно использоваться в этих методах для сравнения и возврата.

0 голосов
/ 25 октября 2018

A Карта для хранения счетчика каждого размера может быть полезна

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
    }
}
0 голосов
/ 25 октября 2018

Вы можете использовать статическую хэш-карту, например,

    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);
       }
    }
}
0 голосов
/ 25 октября 2018

Статический 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 обновить там же.

...