• ベストアンサー

ArrayListのなかにtreeを保存する方法。

複数の木を扱うときのことなんですが、 ArrayListのなかにtreeを保存する方法を教えてください。 以下のようにした場合: ArrayList<Node> list = new ArrayList<Node>(); listのなかにはnodeしか入ってない状態になると思うのですが、 この状態で、どのように木として扱えばいいのでしょうか? たとえばarraylistのindexが0と1のとこにAVLtreeを入れる場合、 その入れ方や、それぞれの木のnodeの参照の方法があれば教えてください。 一応、木が一つしかない場合の基本的なnodeの編集、add, delete, traverseについてはわかっています。どうかよろしくおねがいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.4

> このようにすることは可能でしょうか? やってみればわかるわ。 答えるまでもないわね。 > あとから木を修正したり葉をつけたりするにはどのようにしたらいいのでしょうか? ArrayListから取り出してつければいいだけよ。

2009googoo
質問者

お礼

やってみます ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.3

補足があるようなので補足します。 うーむ、「木を自作した」ならばTreeクラス的な感じにコーディングするのが自然だと思うのですが。 > BinaryNode overallRoot1 = new BinaryNode("hello", null, null ); > overallRoot1.left = new BinaryNode("this is left", null, null ); ではちょっと自作の木とは呼びがたい気がします(いやたしかに自作の木といえばそうなんですけどね)。 それと、ArrayListですが、これは言ってしまえば「配列」です。 ただ可変長なだけです。 なので、配列でできることは何でもできます。 とりあえず配列だったらどうなるかを考えてみると良いかもしれません。

2009googoo
質問者

お礼

ありがとうございました。 なんとなくわかってきました。

全文を見る
すると、全ての回答が全文表示されます。
  • LOHA
  • ベストアンサー率52% (203/388)
回答No.2

どういうものを考えているのか、想像しかねるのですが、木は自作するつもりなのでしょうか? もしそうであれば、listに入れるノードをルートとして ArrayList<Node> list = new ArrayList<Node>(); list.add(new Node); list.get(0).left = new Node(); ... といった感じになる(適当です)と思われます。 もし、コンテナを入れたいのであれば、例としてTreeMapを入れるとすれば ArrayList<TreeMap> list = new ArrayList<TreeMap>(); list.add(new TreeMap()); list.get(0).put("Key1","Value1"); String val1 = list.get(0).get("Key1"); という感じになるでしょう(これまた適当)。 以上、参考までに。

2009googoo
質問者

お礼

ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

ええと、イメージとしては ArrayList<AVLtree> list = new ArrayList<AVLtree>(); こういうことかしら。 (AVLtreeというクラスがあるわけではないけど) だとするといったい何を悩んでいるのかがいまいちわからないんだけど。 Node node0 = list.get(0); で1つだけとり出せば その1つだけなら処理できるわけでしょ? ------------------------------------- それともこういうことかしら。 たった1つのAVLtreeがあって、その要素がArrayListの中に格納されている。 これだとしたら次のような説明ができるわ。 Node node0 = list.get(0); Node node1 = list.get(1); の2つがあって node0がnode1の親であるとする。 このとき、node1にnode2という子を接続したとする。 するとnode0の孫にもnode2が見えるわ。 これをオブジェクト指向的には「参照」と呼ぶけど。 もうちょっと書くと index0にいるnode0にnode1をつける、 index1にいるnode1にnode2をつける ・・・ indexnにいるnodenにnoden+1をつける を繰り返したあと index0のnode0を取得してみると node0の下にはn子のnodeが1列に連なるわよ。

2009googoo
質問者

補足

回答ありがとうございます。説明不足ですみません 木は自作したものです。 そして複数の木を扱うときのケースです。 (内部クラスにnodeをつくりました。) その場合、まずアレイリストつくって ArrayList<BinaryNode> list = new ArrayList<BinaryNode>(10); 次に木をつくって BinaryNode overallRoot1 = new BinaryNode("hello", null, null ); overallRoot1.left = new BinaryNode("this is left", null, null ); それをアレイリストに保存 list.add(overallRoot1); 次の木も同じように作って最後にアレイリストに保存 list.add(2番目の木のoverallRoot); このようにすることは可能でしょうか? その場合、 あとから、木を修正したり葉をつけたりするにはどのようにしたらいいのでしょうか? よろしくおねがいします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ArrayList で配列を扱う場合の記述方法について

    ArrayList で配列を扱う場合の記述方法について、 探しきれないのでご教授お願いします。 ArrayList list = new ArrayList(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } という箇所をArrayList<Date>listを使って書き直すのはどのようになるでしょうか。 ArrayList<Date>list= new ArrayList<Date>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } とすると、 型 ArrayList<Date> のメソッド add(Date) は引数 (String) に適用できません。 というエラーになってしまいました。

    • ベストアンサー
    • Java
  • ArrayListに入っているデータで・・・

    addしたデータの位置を知りたいのですが、 たとえばtest2はlist内の何番目にあるか 調べる場合、どうすればわかるでしょうか? よろしくお願いします! List list = new ArrayList(); list.add("test3"); list.add("test1"); list.add("test2");    …    …

    • ベストアンサー
    • Java
  • ArrayListのイテレータについて

    java初心者です. 以下のようなプログラム(かなり簡略化しています)で ArrayList<Integer> list =new ArrayList<Integer>(); list.add(new Integer(1)); Iterator it = list.iterator(); while(it.hasNext()){ it.next() if(Math.random()<0.5) list.add(new Integer(2));//50%の確率で"2"を追加 }; arraylistの「先頭からイテレータを使って呼び出していくのと同時に,後ろに50%の確率で"2"を追加していきたい」のですが, うまく動作しません.「」の中のような動作を行うには,どうすればいいでしょうか? よろしくお願いします.

  • arraylist 二次元配列

    こんにちは 今アレイリストの二次元配列を学習しています DBからデータを取得で表示したいと思っています そこでfor文の拡張とつかうとうまくいうのですが 普通に記述するとうまくいきません 拡張FOR 文を使うのは初めてなので 何が違うかアドバイスお願いします コンパイルできません↓ if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (int k = 0 ; k <= hai.size(); k++) { %> <td width="60"> <% out.print(hai.get(i)); } %> コンパイルOK 表示できています <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (ArrayList list4 : hai) { %> <td width="60"> <% out.print(list4.get(i)); } %> <br> </tr> </table> <% 上のソースの エラーメッセージ 2013/04/16 9:24:12 org.apache.catalina.core.ApplicationDispatcher invoke 致命的: サーブレット jsp のServlet.service()が例外を投げました java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 よろしくお願いします

    • ベストアンサー
    • Java
  • ArrayListはオブジェクトのポインタを渡している?

    ArrayListはオブジェクトのポインタを渡している? 例えば、一つのメソッド内に以下のように書くと、出力は最下部のようになります。 listに入れたモデルを取り出さずにModelを変更しても、listに入れたモデルを変更したのと同じことが出来ています。 C言語で言うところの(Cはあまり覚えていませんが…)、ポインタを渡しているようなイメージになるのでしょうか? --コード-- Model model1 = new Model("model1"); Model model2 = new Model("model2"); ArrayList list = new ArrayList<Model>(); list.add(model1); list.add(model2); showList(list); model1.setName("model1_"); showList(list); --出力-- model1 model2 model1_ model2

    • ベストアンサー
    • Java
  • ArrayListなどのソート

     いつもお世話になっています。ArrayListなどをソートする際に、Comparatorインターフェースを実装したクラスを利用して、辞書順や数値順などでソートすることは出来ますよね。これを任意の単語の順番にソートするにはどのようにすればよいのでしょうか。つまり、下記例において、文字列順ではなくて、"ONE", "TWO", "THREE", "FOUR"の順番にソートしたいのです。 ArrayList list = new ArrayList(); list.add("THREE"); list.add("ONE"); list.add("FOR"); list.add("TWO");  やはりcompare()メソッド内で総当り的に比較するしかないのでしょうか。  開発環境はJDK1.4です。事情により返答が遅れてしまうかもしれませんが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • ArrayList::getメソッドは何で不便に作られている?

    ArrayList::getメソッドはObject型を返却しますよね。 そのため、たとえば、  ArrayList list = new ArrayList();  Integer aaa = new Integer();  list.add(aaa);  Integer aaa2 = (Integer)list.get(0); のように、Integerでリストに追加したものを取り出すのに わざわざIntegerでキャストしなければなりません。 なんで、こんな不便な仕様になっているのでしょうか?

    • ベストアンサー
    • Java
  • ArrayList の継承について(初心者です)

    買い物かごクラスのプログラムを作っています。 このソースはフィールドにListを持たせているのですが、ArrayList を継承 してCartクラスを作りたいです。そうすることで、CartクラスのaddItem() メソッドやremoveItem()メソッドはmainでメソッドを呼び出せば良いため、 不要になると思うのですが、合計金額を求めるときに、どのように商品値段 を参照していいのかわかりません。 また、ArrayList を継承する場合、public class Cart extends ArrayList という書き方で良いのでしょうか? public class Cart { List<Item> itemList = new ArrayList<Item>(); public ShoppingCart(){} //商品をカートに追加 public void addItem(Item item){ itemList.add(item); } //カート内に入っている商品の合計金額を返却 public int getTotalPrice(){ int total=0; for(int i=0;i<getItemSize();i++){ total+=itemList.get(i).getPrice(); } return total; } //リストの指定された位置にある要素を削除 public void removeItem(int index){ itemList.remove(index); } }

  • C#.NET ArrayListの使用方法について

    C#.NETを使用しています。ArrayListを宣言、インスタンス化し、 "別々の値を持つ"要素20個をAdd(追加)しているはずなのですが、 要素を取り出して、値を見てみると"同じ値"になってしまっています。 自分なりに考えたのですが原因がわかりません。 どなたかご教授お願いします。 書いたソースは以下のような感じです。 public class Area{ _____// リスト _____public ArrayList list; _____//コンストラクタ _____public Area(){ _________ list = new ArrayList(); __________//要素の作成は以下で行う __________for(int cnt=0;cnt<20;cnt++){ ___________ AddNodeList(new 要素); } _____} _____public void AddNodeList(要素){ _______要素型 a = 要素; _______list.Add(a); _____} }

  • ArrayList

    課題プログラムの中で、いくつかArrayListを使ったメソッドを作って動かすものが出題されているのですが、そのうち「ArrayListの文字を反転させて出力する」というのがわかりません。 何を使ったらよいでしょうか? ちなみに、私の書いたプログラムの中では、 ArrayList<String> list = new ArrayList<String>(); としていますので、それで書いて下さると嬉しいです。 また、課題の中で、listの中に入っているのは、String型のアルファベット10個です。 教えて下さい、よろしくお願いします。 ▼参考API http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/ArrayList.html

    • ベストアンサー
    • Java
VersaProのメモリ増設について
このQ&Aのポイント
  • VersaProのメモリ増設について質問があります。メモリを増設することにより、パソコンの動作が向上するのか知りたいです。
  • VersaProのPC-VKT42BZCBというノートパソコンにメモリ増設が可能なのか教えてください。
  • VersaProのノートパソコンで有線LAN接続していますが、メモリを増設することで通信速度が向上するのでしょうか。
回答を見る