• ベストアンサー

JAVA  ArrayListからArrayListへのコピー

java で、ArrayListからArrayListへコピーはできるのでしょうか? clone()というメソッドがありましたが、よくわからず、コピーできてないようなので伺いました。 ベーシックではできるようですが、JAVAでもできるのでしょうか? どなたか教えていただけませんでしょうか?

  • Java
  • 回答数4
  • ありがとう数9

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

  • ベストアンサー
noname#160244
noname#160244
回答No.3

ArrayList li = new ArrayList(list); でよいでのでは?

aabbccddzz
質問者

お礼

ご回答ありがとうございます。おかげさまで、あなた様の記述で解決いたしました。 本当に助かりました。 今後も何卒アドバイスを宜しくお願いいたします。 ありがとうございました。

その他の回答 (3)

回答No.4

まずあなたがなぜArrayListをコピーする目的を明記するべきです。 そうでなければ、浅いコピー(シャローコピー)なのか深いコピー(ディープコピー)なのかわからないので、非常に答えにくいわけです。 どちらの場合でも、clone()で解決できることは間違い有りませんよ。 ただ、clone()を使うためには、Object#clone()のオーバーライドとCloneableインターフェースの実装が必要になります。 あなたがその辺のことまで分かっているのかどうかさえも、われわれには分からないのです。なぜならあなたはご自分の書いたコードさえ提示していないのですから。 ということで、目的とあなた自身が書いたソースコードをお知らせください。

aabbccddzz
質問者

お礼

ご回答及び、補足要求ありがとうございます。 あなた様のおっしゃるとおり、ArrayListのコピーの目的も明記した方が、状況がわかりやすかったかと思っております。大変失礼いたしました。 私自身、シャローコピーとディープコピーの理解があいまいでした。 この件に関しましては、ArrayLits li =new ArrayList(list); で解決いたしました。 併し、シャローコピーとディープコピー、cloneメソッド等の理解があいまいですので、勉強したいと思っております。 ご意見本当にありがとうございました。

noname#49428
noname#49428
回答No.2

Array#cloneは、インスタンスのコピーです。 既にある別のインスタンスにListの内容を「入れ替える」のは、リストをループでまわして入れ替えるのが一番簡単じゃないでしょうか。 貴方が考えている「コピー」の定義をもう少し分かりやすく定義して頂ければ、もっと明確なアドバイスを出来るかもしれません。

aabbccddzz
質問者

お礼

texjoyさん、いつもご回答ありがとうございます。 少々プログラムに手をつけていましたので、お礼が遅くなってしまいました。大変失礼いたしました。 ArrayList li =new ArrayList(list); のような記述でできました。 少しずついろいろなことを覚えて、使いこなせれば!いいですね。 ありがとうございました。

noname#49428
noname#49428
回答No.1

ArrayList#cloneを使ってインスタンスのコピーはできます。 ただし、ディープコピーではなくシャローコピーになりますが。 何を持ってコピーできていないと思ったのでしょうか?

aabbccddzz
質問者

補足

えっと、今の状態は ArrayList list に数字の12345678910が入っています。 これを、ArrayList li にコピーしたかったのですが、今一度clone()メソッドの意味がわかってなかったようです。 list.clone();と記述すると、listからliへのコピーにはならないですし・・・。 あの、お手数ですがお願いがあります。 ArrayList list をArrayList li にコピーして、liをSystem.out.println();する記述を打っていただけませんでしょうか?

関連するQ&A

  • ArrayListのcloneメソッド

    お世話になります。 ArrayListのcloneメソッドなんですが、API上は「ArrayList のインスタンスのシャローコピーを返します。要素自体はコピーされません。 」と記載がありますが、 「ディープコピー」をしているような感じがして、なぜ「シャローコピー」と言っているのか、教えて欲しいです。 しかも、要素自体もコピーされているような…。 自分の理解では、 シャローコピー:コピー元、コピー先で同じオブジェクトを参照する ディープコピー:コピー元、コピー先で違うオブジェクトを参照する 試したソースは以下です。 --------------- import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<String> array = new ArrayList<String>(); array.add("a"); array.add("b"); ArrayList<String> array2 = (ArrayList<String>) array.clone(); array2.add("c"); System.out.println("array:" + array); System.out.println("array2:" + array2); } } --------------- cloneメソッドはシャローコピーなので、array2で「c」がaddされたら、arrayも「c」が追加されて、 array:[a, b, c] array2:[a, b, c] となるはずが、 array:[a, b] array2:[a, b, c] となります。 array、array2は別々のオブジェクトを参照しているような気がします。 恐らく大きな勘違いをしているのかもしれませんが、 調べてもいまいち理解できませんでした。 お手数おかけしますが、よろしくお願い致します。

    • ベストアンサー
    • Java
  • 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
  • javaのarraylistについて

    あるクラスでArrayListを使って オブジェクト変数を保存したんですけど その保存したオブジェクト変数をほかのクラスで使用するにはどうしたらいいでしょうか? 例えば クラスAでクラスBのオブジェクトを作成し そのオブジェクト変数をArrayListに保存しました クラスCでArrayListに保存したオブジェクト変数を呼び出したいです 初心者なので何を言ってるのかわからないかもしれないですけど よろしくお願いします

  • java private ArrayList<Node> al; わからない

    javaを勉強しているのですが、 private ArrayList<Node> al; とゆうところの意味が分かりません。 どなたかご教授お願いします。

  • javaにおけるシャローコピーとディープコピー

    現在、javaによるプログラミングを行っています。  シャローコピーとディープコピーについてお聞きしたく質問させていただきます。  例えば、あるクラスDataをインスタンス化して、instance という名前のArrayListを作ったとします。  class Data{ int x; int y; int z; }  それで、insというArrayListを別のData型のインスタンス化されたins2という型のArrayListにコピーしたいんですが。  現在は、 ins2.add(ins.get(~~));   といった感じで書いていて、処理の関係上途中、コピー元のinsをremove allで全部削除してしまっていたりしているんですが、ins2の中身は、insが削除されたにも関わらず何とも変化がなくて、一応目的の動きはしています。  シャローコピーの場合、参照元に何か変化があるとコピー先のものまで変化してしまうようなので、これは、ディープコピーということでいいんでしょうか?   

  • ArrayListへの格納について

    お世話になります。 javaのArrayListについて質問ですが、とあるストリームデータがあり、それをArrayListに入れたいの ですが、区切り文字(\n)でaddできなくて困っております。ひとつのStringデータなどからaddするには どのように行えばいいのでしょうか。

  • ArrayListをジェネリクスで記述するには?

    Javaで ArrayList str[]=new ArrayList[10]; をジェネリクスで記述したいのですが、どう書けばいいですか?

    • ベストアンサー
    • Java
  • ArrayListのキャスト

    JavaのArrayListについて質問します。 Class A extends OyaA の関係があります。 ArrayList<A> arrayA と ArrayList<OyaA> arrayOyaA で  arrayOyaA=(ArrayList<OyaA>)arrayA;  arrayA=(ArrayList<A>) arrayOyaA; のCastを行いたいとおもいます。コンパイルエラーになってしまいます。 Castする方法はありますでしょうか。 なければ上手くデータ変換する方法を教えてください。 何卒宜しくお願い致します。

  • ArrayListについて教えてください

    ArrayListについて教えてください Java初心者です。 現在あるJavaの問題を解いていて、つまづいてしまいました。 わかる方、ご教示お願いします。 以下問題 ****************************************************************** 以下2メソッドを持つShikenKekkaクラスを作成せよ ・学籍No,科目,点数を登録する void Toroku(String 学籍No , Kamoku 科目 , int 点数); ・引数で指定した学籍No,科目の点数を返す int getTensu(String 学籍No,Kamoku 科目); 科目は以下の定義 enum Kamoku{KOKUGO,SANSU,RIKA} 使用例として、 ShikenKekka sk = new ShikenKekka(); sk.Toroku("0A01",Kamoku.KOKUGO,70); sk.Toroku("0A01",Kamoku.SANSU ,60); sk.Toroku("0A01",Kamoku.RIKA ,50); sk.Toroku("0B02",Kamoku.KOKUGO,75); sk.Toroku("0B02",Kamoku.SANSU ,65); sk.Toroku("0B02",Kamoku.RIKA ,55); int point = sk.getTensu("0B02",Kamoku.RIKA); ****************************************************************** ArrayListを使って値を格納しようとしているのですが、 ArrayListの使い方がうまくできません。 学籍No,科目,点数の3つの値をどうすれば格納して保持できるのか、 教えていただけると助かります わかりずらい説明で申し訳ありません。

  • ArrayList でスタックを

    初歩的でツマラナイかもしれません。 import java.util.ArrayList; でスタックを実現するクラス"MyStack"を書きました。 フィールドは private ArrayList<Integer> stack = new ArrayList<Integer>(); のみという条件です。 MyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MyStack {   private ArrayList<Integer> stack = new ArrayList<Integer>();      // データを先頭に追加   public void push( int item ) {     stack.add( item );   }   // 先頭のデータを取り出す   public int pop( ) {     int rtn;     if( stack.isEmpty() ) {       System.out.println( "スタックは空です." );       System.exit( 1 );     }          rtn = stack.get( 0 );     stack.remove( 0 );     return rtn;   } } このMyStackを実行するクラス"MainForMyStack"を書きます。 実行結果は、標準出力に 43210 と出ることを想定しています。 MainForMyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MainForMyStack {   public static void main(String[] args) {     MyStack stack = new MyStack();     // 0,1,2,3,4 をスタックに追加     for( int i=0; i < 5; i++ ) {       stack.push( i );     }     // スタックのデータを先頭から取り出す     for( int i=0; i < stack.size(); i++ ) {       System.out.print( stack.pop() );     }   } } さて、MainForMyStack.java の i < stack.size(); の箇所でエラーが出るのはなぜでしょう? どなたかご教授の方お願いします。

    • ベストアンサー
    • Java