8

ArrayLists の ArrayList を作成しようとしています。25 個の ArrayList を作成し、それらの ArrayList に異なる値を保持させたいと考えています。目標は、単語の長さでソートされた辞書を作成することです。

私のコードは次のようになります

    for(int i = 0; i < 25; i++)
         list2D.add(list);
    for(int i = 0; i < stringList; i++)
         list2D.get(stringList.get(i).length()).add(stringList.get(i))

問題は、終了後にすべてのリストに同じ値が含まれることです。

問題が発生する理由はわかっています。「リスト」は ArrayList であり、ArrayList はオブジェクトであり、オブジェクトを編集すると、そのオブジェクトを含むすべてが編集されます。

私が試した問題を解決するには

    for(int i = 0; i < 25; i++){
        list = new ArrayList<String>();
        for(int i2 = 0; i2 < stringList.size(); i2++){
            if(stringList.get(i).length() == i)
                list.add(stringList.get(i2));
        }
        list2D.add(list);
    }

しかし、「list2D」をテストすると

    for(int i = 0; i < 25; i++)
         System.out.print(list2D.get(i).size()+" ");

私は得る

0 0 0 0 0 58110 0 58110 0 0 0 0 0 0 0 0 0 0 0 0 0 0

理由がわかりません...

また、stringList には 58110 個の値が含まれていることに注意してください。

また、25 の異なる ArrayList を作成する必要はありません。

4

4 に答える 4

13

stringList の単一パスを実行するには、次のことを試します

List<List<String>> dict = new ArrayList<>();
for(string s: stringsList) {
    int len = s.length();
    // add new array lists as required, could be any length, assuming << 100
    while(dict.size() <= len) dict.add(new ArrayList<String>());
    // add the string to the right list.
    dict.get(len).add(s);
}
于 2013-11-03T21:48:21.720 に答える
2

かんたんだよ。たとえば、次のように作成できます: http://ideone.com/3NZwWU

// just for convenience, initializes arraylist with values
static <T> ArrayList<T> AL(T... values) {
    ArrayList<T> r = new ArrayList<T>();
    for (T x : values) {
        r.add(x);
    }
    return r;
}

public static void main (String[] args) throws java.lang.Exception
{
    System.out.println(AL(
        AL(3,2,24,131),
        AL("this", "is", "second", "array")));
    // prints `[[3, 2, 24, 131], [this, is, second, array]]`

}
于 2013-11-03T21:46:24.183 に答える