6

私はクラスを持っていて、その中にハッシュマップを含むいくつかのデータ構造があります。ただし、ハッシュマップにデフォルト値を設定したいので、プリロードする必要があります。オブジェクト内でputメソッドを使用できないので、これを行うにはどうすればよいですか?

class Profile
{
    HashMap closedAges = new HashMap();
    closedAges.put("19");
}

これで修正しましたが、オブジェクト内でメソッドを使用する必要がありました。

class Profile
{   
    HashMap closedAges = loadAges();
    HashMap loadAges()
    {
        HashMap closedAges = new HashMap();

        String[] ages = {"19", "46", "54", "56", "83"};
        for (String age : ages)
        {
            closedAges.put(age, false);
        }
        return closedAges;
    }
}
4

2 に答える 2

12

たとえば、クラスのコンストラクターでこれを実行したい

class Example {

   Map<Integer, String> data = new HashMap<>();

   public Example() {
      data.put(1, "Hello");
      data.put(2, "World");
   }
}

または、Javaの奇妙な二重中括弧初期化機能を使用するには:

class Example {

   Map<Integer, String> data;

   public Example() {
        /* here the generic type parameters cannot be omitted */
        data = new HashMap<Integer, String>() {{
           put(1, "Hello");
           put(2, "World");
      }};
   }
}

最後に、がクラスの静的フィールドである場合は、ブロックHashMap内で初期化を実行できます。static

static {

   data.put(1, "Hello");
   ...
}

Behesコメントに対処するために、Java 7を使用していない場合は、<>角かっこに型パラメーター(この場合は)を入力します<Integer, String>

于 2012-07-05T20:55:26.393 に答える
11

あなたはこれを行うことができます:

Map<String, String> map = new HashMap<String, String>() {{
   put("1", "one");
   put("2", "two");
   put("3", "three");
}};

このJavaイディオムは、二重中括弧の初期化と呼ばれます。

最初の中括弧は新しいAnonymousInnerClassを作成し、2番目は匿名内部クラスがインスタンス化されるときに実行されるインスタンス初期化ブロックを宣言します。

于 2012-07-05T20:55:51.790 に答える