2

ArrayList 内の ArrayList を簡単に識別する方法が必要な場合は、インデックス 0 に識別子を配置し、ループを使用してインデックス 0 をすべて出力します。今、ネストされた ArrayLists に名前を付ける方法があるかどうか疑問に思っています。

例えば:

ListOfLists.add( new ArrayList<String>() );
ListOfLists.get(ListOfLists.size() -1).add("someIdentifierHumansCanRead");

にする方法はありますListOfLists.add(new ArrayList<String>())ListOfLists.add(ArrayList someIdentifierHumansCanRead = new ArrayList<String>)

それとも、これは完全にばかげているのでしょうか?

4

4 に答える 4

4

すべての配列リストが文字列でキー設定されているマップについて話していますが、反復順序が失われます。または、キーを配列リストに格納し、配列リストをマップに格納することもできます。

于 2012-10-21T09:03:43.390 に答える
1

ArrayList に「名前を付ける」必要がある場合は、ハックを使用する代わりに意味のあるデータ構造を作成する必要があります。結局のところ、これは OO プログラミングです。

public void MyNamedBean {
    private String name;
    private final List<String> list = new ArrayList<String>();

    public MyNamedBean(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    // If you don't need to change the name, make the field
    // final and remove this method.
    public void setName(String name) {
        this.name = name;
    }

    // It should have a more meaningful name.
    public List<String> getList() {
        return list;
    }
}

別の回答に対する私のコメントに基づいて更新します。これはオブジェクト指向の設計上の問題です。名前付きのリストの場合、それは単なるリストではありません。つまり、List の実装を直接拡張するのではなく、意味のあるクラスを作成する必要があります。ある時点で 2 番目のリストまたは別の「名前」 (人間が読めるラベルなど) が必要な場合はどうすればよいでしょうか? いつ継承を使用し、いつ合成を使用するかについて、 Liskov 置換原則を読むことができます。継承より合成を優先するも参照してください。

于 2012-10-21T09:17:43.797 に答える
1

独自のクラスを実装ArrayListし、その識別子プロパティを定義します。

class NamedList<T> extends ArrayList 
{
    private String name;

    public NamedList(String name) {
        this.name = name;
    }

    // Getters/Setters and other stuff for identifier, etc.
}

ArrayList<NamedList<String>> superList = new ArrayList<NamedList<String>>();
superList.add(new NamedList<String>("babangida"));
于 2012-10-21T09:10:12.787 に答える
0

参照を意味する場合は、これを試すことはできません

ArrayList someIdentifierHumansCanRead = new ArrayList<String>();
ListOfLists.add(someIdentifierHumansCanRead)

またはMap<String,List<String>>、識別子を使用して配列リストを取得する場合は、を使用できます。

map.put("id",new ArrayList<String>());

マップは、HashMap / LinkedHashMap / TreeMap などにすることができます。反復順序は、選択した実装によって異なります。

于 2012-10-21T09:07:03.087 に答える