0

ハッシュマップの値であるオブジェクトを追加/編集しています--異なるキーを使用しています。

ただし、ハッシュマップ内の1つのオブジェクトを編集すると、それらすべてが編集されるようです(?)

ここで何が間違っていますか?

まず、私の(名前が悪い)ハッシュマップクラス:

import java.util.HashMap;
public class hashmap {

static HashMap<Integer, exObj> hm;

hashmap(){
    hm = new HashMap<Integer, exObj>();
}
public void createVal(){
    for (int i = 0; i<10; i++){
        hm.put(i, new exObj(i));
    }
    hm.get(2).setValue();
}
public void printVal(){
    for (int i = 0; i<10; i++){
        System.out.println(hm.get(i).getValue());
    }
}
public static void main(String args[]){
    hashmap hmap = new hashmap();
    hmap.createVal();
    hmap.printVal();    
}

}

次に、私の単純な exObj クラス:

public class exObj {

private static int value;

exObj(int i){
    value = i;
}

public void setValue(){
    value = value + 1;
}

public int getValue(){
    return value; 
}

}

出力を返します:

10
10
10
10
10
10
10
10
10
10
4

3 に答える 3

2

これはvalue、あなたのクラスにあるためexObjですstatic

public class exObj {

private static int value;

であるためstatic、変数のコピーは 1 つしかなく、すべてのexObjオブジェクトで共有されます。

インスタンスとクラスのメンバーについてを参照してください。

于 2013-04-02T07:45:40.100 に答える
0

@Jeff Foster と @Jesper が言ったように、静的変数を使用することがすべてです。コードを実行して、例にさらに情報を追加するだけです

for (int i = 0; i<10; i++){
    hm.put(i, new exObj(i));
}

初期化される最後の exObj は、すべてのインスタンスで共有される値「9」を取得します。次に、呼び出すことによって

hm.get(2).setValue();

値は「10」に設定されています

「値」を次のように宣言するだけです。

private int value;

そのため、exObj のすべてのインスタンスには独自の値があります。また、良い習慣として、クラス名を大文字で始めることを忘れないでください

于 2013-04-02T08:36:42.323 に答える