- ベストアンサー
Collectionからの型変換について
- Collectionからの型変換について説明します。
- Collectionから配列への変換は可能ですが、ListやMapへの変換はできません。
- 具体的なコード例を示し、実行結果を確認しました。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- コレクションってなんですか?
UWSCを勉強しています。そこでGETOLEITEMという関数が何を取得するのかわかりません。戻り値はゲットしたコレクションの数と書かれていますが、コレクションが何をさしているのかわかりません。これはどういったものなのでしょうか? // コレクションの取得 戻値 = GETOLEITEM( コレクションプロパティ名 ) 引数 コレクションプロパティ名: COMオブジェクト.コレクション取得プロパティ名 戻値 ゲットしたコレクションの数 習得した物は配列変数の ALL_OLE_ITEM[ ] に格納される (配列はゼロから) // c:\windows下のディレクトリ表示 fs = CreateOLEObj("Scripting.FileSystemObject") gf = fs.GetFolder("c:\windows") for i = 0 to GETOLEITEM(gf.SubFolders)-1 // コレクション取得 print ALL_OLE_ITEM[i].name next
- ベストアンサー
- その他(プログラミング・開発)
- java プログラミング 型変換 データベース
型変換について質問です。下のプログラムは 「Double str2 = (Double)iter3.next();」 の行で java.lang.ClassCastException: [I at kadai6_a.main(kadai6_a.java:152) というエラーがでます。なんでかわからなくて教えてください! ちなみに上のStringへの型変換ではエラーはでないんです。。 (前略) PreparedStatement stmt2 = db.prepareStatement( "INSERT INTO doc(docid, docname,length) VALUES(?, ?, ?);"); docID = 0; Iterator iter2 =docNames.iterator(); List l = java.util.Arrays.asList(str); Iterator iter3 = l.iterator(); while(iter2.hasNext()){ while(iter3.hasNext()){ String docName = (String)iter2.next(); Double str2 = (Double)iter3.next(); stmt2.setInt(1, docID); stmt2.setString(2, docName); stmt2.setDouble(3,str2); stmt2.executeUpdate(); //System.out.println("docID="+docID); docID++; } } stmt2.close(); } catch (Exception e) { e.printStackTrace(); } (後略) ではお願いします!
- ベストアンサー
- Java
- コレクションクラスの使い分け方
プログラミング初心者です。 コレクションクラスについて勉強中ですが、 1:ArrayListクラス(Listインターフェース) 2:HashSetクラス(Setインターフェース) 3:HashMapクラス(Mapインターフェース) 4:Vectorクラス 5:Iteratorインターフェース これらの違いがよく分かりません。 <質問1> 1と2の違いは、 1:順序付けて、重複オブジェクトを保持する 2:順不同で一意のオブジェクトを保持する というところまでは分かりました。 これらと3・4の違いって何でしょうか? <質問2> 5:ポインタを前後に動かすような感じで、保持したコレクションの中身を操作できる、 ということだと思いました。 1~4まででも、要素(インデックス)を指定しれやれば、中身を操作することはできると思うのですが、これを使ったほうがどのように便利なのでしょうか? 初歩的な質問で申し訳ありませんが、具体例などを示して教えていただければ助かります。 よろしくお願いします。
- ベストアンサー
- Java
- while文の表示
こんにちは 今DB接続し DBからデータを表示するのを勉強しています public String[][] selectExec(String sql) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用ののArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //KAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 while(aa.next()){ //Resultsetが最終行になるまで実行 TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ //オブジェクトの解放 return hairetu(TESTNO,NAME,KANA); public String[][] selectExec(String sql, int fromIdx,int toIdx) throws SQLException{ String[][]all=selectExec(sql); ArrayList list = new ArrayList(Arrays.asList(all[0])); ArrayList list1 = new ArrayList(Arrays.asList(all[1])); ArrayList list2 = new ArrayList(Arrays.asList(all[2])); int i=1; while(i<fromIdx){ //指定された前のリスト削除 list.remove(0); list1.remove(0); list2.remove(0); i++; } while(toIdx<list .size()){ //指定されたあとのリスト削除 list .remove(toIdx); list1.remove(toIdx); list2.remove(toIdx); toIdx++; } return hairetu(list ,list1,list2); public String[][] hairetu(ArrayList T,List N ,List K){ String[][]all=new String[3][T.size()]; all[0] = (String[])T.toArray(new String[0]);//配列TSETNOに収納 all[1] = (String[])N.toArray(new String[0]);//配列NAMEに収納 all[2] = (String[])K.toArray(new String[0]);//配列KANAに収納 return all; selectExec(String sql)で全表示 selectExec(String sql, int fromIdx,int toIdx) で列を何行~何行を指定 でリストに変換、リスト削除して 二次元配列にもどしているのですが たとえば 1~5を指定すると 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 6 6 6 8 8 8 ↑のように 5ひとつとばしで表示されます while文の書き方がわるいのでしょうか・・・・ アドバイスお願いします
- ベストアンサー
- Java
- Javaのプログラムの質問です。
Javaのプログラムについての質問です。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。 注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中に番号を振ってあります。 import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; import java.util.List; class LocalList implements List{ private int Count; private String Data[]; private Iterator ite; private ListIterator lite; // コンストラクタ void mylist(){ Data = new String[10]; Count = 0; } (1) public boolean add(Object str){ if(Count >= 10){ return false; } Data[Count ++] = new String((String)str); return true; } public void add(int i,Object str){ } public boolean addAll(Collection c){ return false; } public boolean addAll(int i,Collection c){ return false; } (2) public void clear(){ Count = 0; } public boolean contains(Object str){ return false; } public boolean containsAll(Collection c){ return false; } public boolean equals(Object str){ return false; } (3) public Object get(int i){ return (i >= Count); } public int hashCode(){ return -1; } public int indexOf(Object str){ return -1; } public boolean isEmpty(){ return false; } public Iterator iterator(){ return ite; } public int lastIndexOf(Object str){ return -1; } public ListIterator listIterator(){ return lite; } public ListIterator listIterator(int i){ return lite; } (4) public Object remove(int i){ return (i >= Count); } public boolean remove(Object str){ return true; } public boolean removeAll(Collection c){ return false; } public boolean retainAll(Collection c){ return false; } (5) public Object set(int i,Object str){ return Data[i]; } (6) public int size(){ return Count; } public List subList(int i,int j){ return this; } public Object[] toArray(){ return Data; } public Object[] toArray(Object[] a){ return Data; } } class Main { public static void main(String[] args) { mylist sub = new mylist(); sub.add("ビルドバーニングガンダム"); sub.add("ライトニングガンダム"); sub.add("ウイニングガンダム"); sub.add("ガンダムフェニーチェリナーシタ"); sub.add("R・ギャギャ"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // setメソッド sub.set(1,"ガンダムエピオン"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // sizeメソッド System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n"); // removeメソッド sub.remove(1); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // clearメソッド sub.clear(); System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです"); } } setメソッドとremoveメソッド以外は起動するのようになったのですが、この2つがうんともすんとも動きません。ジェネリクス型を使うという考え方もあるらしいのですが、ネットで調べてもピンと来ず寸詰まり状態になってしまっています。後少しだと思うのですが。。。。 どなたかご教授頂けないでしょうか?よろしくお願い致します。
- 締切済み
- Java
- binarySearchについて
こんにちは、Javaを勉強しているものです。 binarySearchをしたとき、存在しない値を検索すると負の値が戻されると聞きましたが、その数値はどのようにして決められるのでしょうか? import java.util.*; class Sample { public static void main(String[] args){ String[] a ={"he", "is", "a", "boy"}; List<String> li = Arrays.asList(a); for(String s : a) System.out.print(S + ":"); System.out.println(); Collections.sort(li); for(String s: li) System.out.print(s + ":"); System.out.println(); System.out.println(Collections.binarySearch(li, "boy")); System.out.println(Collections.binarySearch(li, "girl")); Collections.reverse(li); for(String s: li) System.out.print(S + ":"); } } このコードの実行結果は、 he:is:a:boy: a:boy:he:is: 1 -3 is:he:boy:a: となります。 "girl"は、リストに存在しないので負の値である"-3"が返されたわけですが、3という数字がどのような理由で出てきたのか教えてください。 宜しくお願い致します。
- 締切済み
- Java
- JSP DB サーブレット 表示
こにちは。最後のfor分の記述でまよっています。 今回JSPで検索 表示 サーブレットでDB取得(二次元配列で返しています) 昇順、降順、指定行だけ表示、前方一致などの条件をつけて表示しようとしています JSPの最後のFOR文の回数のとこlistサイズなどにしたいのですが リストがないときどうすればいいのかなと・・・ あとは今はとりあえず10と指定しているので前方一致のときに 件数がへるとインデックスが存在しないというエラーがでます どういう風に書けばうまくいくのか少しでいいんでアドバイスください String name=request.getParameter("name"); //NAMEの前方一致条件取得 String narabi=request.getParameter("narabi"); //降順、昇順、の値取得 String menu=request.getParameter("menu"); //昇順、降順するところの列 name取得 db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+1+",'山田', 'ヤマダ')"); db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+2+",'佐藤', 'サトウ')"); ・・・・・・・・・ / /課題のため10行入力 db.commit(); //コミットして 確定 ArrayList list; ArrayList list1; ArrayList list2; //リスト作成 if(narabi!=null){//昇順 降順にチェックがあるか判断 String[][]hai4=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%' order by "+menu+" "+narabi+" ;"); //nameで前方一致 menuで昇順降順場所 narabiで降順昇順 list = new ArrayList(Arrays.asList(hai4[0])); list1 = new ArrayList(Arrays.asList(hai4[1])); list2 = new ArrayList(Arrays.asList(hai4[2])); }else{//昇順降順なければこっち String[][]hai3=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%';"); //nameで前方一致 list = new ArrayList(Arrays.asList(hai3[0])); list1 = new ArrayList(Arrays.asList(hai3[1])); list2 = new ArrayList(Arrays.asList(hai3[2])); } if (request.getParameter("TESTNO") != null){ request.setAttribute("list", list); } if (request.getParameter("NAME") != null){ request.setAttribute("list1", list1); } if (request.getParameter("KANA") != null){ request.setAttribute("list2", list2); } //列指定されたときだけ setAttribute db.disconnect();//クローズする RequestDispatcher dispatcher =request.getRequestDispatcher("/::::.jsp"); //フォワード ページ指定 dispatcher.forward(request, response); JSP(検索、表示) <html> <head> <H1>検索画面</H1> </head> <body> <from> <form method="get" action="../Servlet"> 検索内容 TESTNO <input type="checkbox" name="TESTNO" value="TESTNO" > NAME <input type="checkbox" name="NAME" value="NAME" > KANA <input type="checkbox" name="KANA" value="KANA" > <br> 検索条件 <input type="text" name="name" >(NAME前方一致)<br> ソート <select name="menu"><br> <option value=TESTNO>TESTNO</option> <option value=NAME>NAME</option> <option value=KANA>KANA</option> </select> <input type="radio" name="narabi" value="ASC" /> 昇順 <input type="radio" name="narabi" value="DESC"/> 降順 <br><input type="submit" value="検索"> </from> </body> </form> <Hr> <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ for(int i=0; i<10; i++){ if(request.getAttribute("list")!=null){ List list=(List)request.getAttribute("list"); out.print(list.get(i)+" "); } if(request.getAttribute("list1")!=null){ List list1=(List)request.getAttribute("list1"); out.print(list1.get(i)+" "); } if(request.getAttribute("list2")!=null){ List list2=(List)request.getAttribute("list2"); out.println(list2.get(i)); } 文字数の関係ですこし削っているところもありますが アドバイスよろしくおねがいします
- ベストアンサー
- Java
- MAPに関して
以下のように、マップにCLASS_Aのリストのリストを格納しています。 CLASS_A { private int a getter setter } MAP<String,List<List<CLASS_A>>> map = new HashMap<String,List<List<classA>>> キーを元に、マップからリストのリストを取得した場合に CLASS_Aからint aを取得する場合 for List<List<CLASS_A> a : DaoList(Daoの取得結果)) for List<CLASS_A> b : a) b.get() } } でよろしいでしょうか? (2重ループになってしまうので、もっと簡単な取得方法あったら教えてください)
- 締切済み
- Java
- プログラムについて
1から453までのあいだでランダムに取得された225個の数字をいったんranに格納し、同様にran2,ran3,ran4にもランダムに取得された225個の数字を格納します。そこでran~ran4までで取得された数字の中から全部に共通して格納されている数字だけをran5に格納するようなプログラムは作成できないでしょうか? ranに格納するまでのプログラムは以下のように作成しました import java.util.*; public class RandomTest { public static void main(String[] args) { for(int i=0; i<225; i++){ int ran = (int)(Math.random() * 452)+1; System.out.println(ran); } } }
- ベストアンサー
- Java
お礼
回答ありがとうございます。 提示して頂いた通りです。 ありがとうございました。