31

私はMyClassを持っています

MyClass(String, String, int);

私はこの方法でArrayListに追加する方法を知っています:

MyClass.name = "Name";
MyClass.address = "adress";adress
MyClass.age = age;

次に、次のようにarrayListに追加します。

list.add(MyClass);

しかし今、私は静的な形で多くのオブジェクトMyClassを持っています、私は追加したいです

ArrayList<MyClass> list = new ArrayList<MyClass>({"Name","Address", age};.....);

私はこのようにすることができます。とにかくありがとう

4

6 に答える 6

49

二重中括弧の初期化を使用できます: -

List<MyClass> list = new ArrayList<MyClass>() {
    {
        add(new MyClass("name", "address", 23));
        add(new MyClass("name2", "address2", 45));
    }
};

ご覧のとおり、はブロックのinner bracesようなもので、一度にを初期化するために使用されます。initializerlist

末尾のセミコロンにも注意してくださいdouble-braces

于 2012-10-01T09:14:15.777 に答える
26

できるよ

List<MyClass> list = Arrays.asList(
                         new MyClass("Name", "Address", age),
                         // many more
                     );

注: これにより、サイズを変更できないリストが作成されます。

于 2012-10-01T09:14:07.830 に答える
8

このようなもの:

List<MyClass> list = new ArrayList<MyClass>(Arrays.asList(new MyClass[] {new MyClass("Name", "Address", age}));

もちろん、クラスには次のようなコンストラクターが必要です。

public MyClass(String name, String address, int age) {
...
}
于 2012-10-01T09:14:16.823 に答える
3

ArrayList次のようにインスタンス化できます。

new ArrayList<myclass>() {{
  add(new MyClass("Name", "Address", age));
}};

ArrayListこれにより、を呼び出す初期化ブロックを使用して、実際に拡張する匿名の内部クラスが作成されますadd。これは明らかに完全に不潔であり、同僚があなたを傷つけたくなるので、Arrays.asList代わりに使用する必要があります。:)

于 2012-10-01T09:14:26.270 に答える
1

最もクリーンでシンプルな初期化が必要な場合は、次のようにすることができます。

    List<MyClass> list = MyClass.build(
        "Name", "Address", 51,  
        "a2", "c", 4,
        "v", "d", 2
    );

これは、次のユーティリティ メソッドを使用します。

public static List<MyClass> build(Object... array) {
    List<MyClass> list = new ArrayList<Test>();
    for (int i=0; i<array.length-2; i+=3) {
        list.add(new MyClass((String)array[i], (String)array[i+1], (Integer)array[i+2]));
    }
    return list;
}
于 2012-10-01T10:23:06.513 に答える
0

これを効果的な方法で行うための「最良の」方法は、次のとおりです。

List<MyClass> list = new ArrayList<MyClass>();

 list.add(new MyClass("name", "address", 23));
 list.add(new MyClass("name2", "address2", 45));

多くのタイピングが必要ですが、はっきりとわかるように、これはより効率的です

別の代替手段は、google guavaを使用することです (効率についてはテストされていません)。

ArrayList<MyClass> list = new ArrayList<MyClass>(
           new MyClass("name", "address", 23), 
           new MyClass("name2", "address2", 45) );

必要なインポートはimport static com.google.common.collect.Lists.newArrayList;

また、@ Rohit Jain によって最初に提案されたように、二重中括弧の初期化を使用できます。

List<MyClass> list = new ArrayList<MyClass>() {
    {
        add(new MyClass("name", "address", 23));
        add(new MyClass("name2", "address2", 45));
    }
};

ご覧のとおり、はブロックのinner bracesようなもので、一度にを初期化するために使用されます。initializerlist

末尾のセミコロンに注意してくださいdouble-braces

ここで説明したように、最後の方法にはいくつかの欠点があることにも注意してください。

于 2015-04-22T20:36:56.207 に答える