2
class Node<E> {
     private E data;
     private Node<E> next;
     Node(E data, Node<E> next) {
         this.data = data;
         this.next = next;
     }
     // .. getter-setters
}

Node クラスのオブジェクトがいくつ作成されたかをカウントするには、クラスに静的属性を追加し、新しいオブジェクトが作成されるたびにそれをインクリメントします。

各タイプに対して作成された Node のインスタンスの数を保持する方法は? (例: 6 つの Node インスタンスは Integer 型、4 つの Node は Float 型など)。

素朴なアプローチは、各型 (IntCount、FloatCount など) に静的変数を追加し、コンストラクターに渡されるデータのインスタンスごとにそれをインクリメントすることです。

class Node<E> {
    private E data;
    private Node<E> next;
    private static int GlobalCount;
    private static int IntCount, FloatCount;

    static {
        GlobalCount = IntCount = FloatCount = 0;
    }

    Node(E data, Node<E> next) {
        this.data = data;
        this.next = next;
        GlobalCount++;

        if(data instanceof Integer) 
            IntCount++;
        else if (data instanceof Float) 
            FloatCount++;
    }
}

現在、これは Integer と Float のカウントのみを追跡します。トレースする型の数が増えると、上記の変更は適切な解決策にはなりません。

これを達成するためのより良い方法があるかどうか知りたいです。

4

2 に答える 2

4

次のことができますHashMap

static HashMap<Class, Integer> refCount = new HashMap<Class, Integer>();

Node(E data, Node<E> next) 
{
    this.data = data;
    this.next = next;
    GlobalCount++;

    Class type = data.getClass();

    Integer countObj = refCount.get(type);
    int count = 1;
    if(countObj != null)
    {
        count = countObj.intValue();
        count++;
    }
    refCount.put(type, count); 
}
于 2012-12-21T05:57:33.930 に答える