- 締切済み
ArrayListにArrayListを用いた場合の対応について
public static ArrayList<Integer> f1 = new ArrayList<Integer>(); public static ArrayList<ArrayList> f2 = new ArrayList<ArrayList>(); public void parse(Context ct){ if(ct.match("f")){ ct.nextToken(); while(ct.currentToken() != null && ct.currentToken().matches("[0-9]+/[0-9]*/[0-9]+")){ f1.add(ct.fToken(ct.currentToken())); ct.nextToken(); } f2.add(f1); f1.clear(); System.out.println(f2); 例f⇒f 1/4/3 2/5/6 4/5/6 1行⇒[1,2,4] 1/3/5 7/1/2 8/3/4 2行⇒[1,7,8] ・ ・ ・ 回答例⇒[[1,2,4],[1,7,8],[…],…,[…]] 上記のようなobj形式のf行をそれぞれ1行ごとに頭文字を取り出して(Contextで)、f1=ArrayList<Integer>にaddしていき、1行を読み終わったらf1=ArrayList<Integer>をf2=ArrayList<ArrayList>にaddしていき、最終的には回答例のような形にしたいです。 私はf1にaddした数字をf2にf1をaddして、その後f1をclearしてその空いたf1にまた次の行の数字をaddさせるつもりだったのですが、f1をクリアしてしまうと一度f2にaddしたはずのものも消えてしまうことに気づきました。 どのように改造すれば回答例のようにf2のArrayListにf1のArrayListをいくつもいれて表示することができますか。 教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yuji
- ベストアンサー率37% (64/169)
ヒントだけ。 f1をクリアして使いまわすのではなく、 新たにArrayListのインスタンスを作ればいいです。 例: List mainList = new ArrayList(); List subList = new ArrayList(); ... mainList.add(subList); // 新たなArrayListインスタンスを作成 subList = new ArrayList(); ... mainList.add(subList);
お礼
回答していただきありがとうございます。 f1をクリアするのではなく、新しいArrayListをContextメソッドのなかででも宣言して毎回作っていけばできるってことですかね。 消すのではなく上書きする。まったく想像の及ばない考えでした。 やってみます。