• 締切済み

Javaを勉強しています。

現在、Javaの勉強中なので初歩的な質問ですみません。 #色々な本やググってみたのですが、未だ理解できないでいます。 Javaでは、たとえば(1)のように左辺(List)の型と右辺(ArrayList)の型が 違う場合でも問題なく使用できるようです。 (1)と(2)で何の違いがあるのか理解できておりません。 何が違うのでしょうか。 (1)List<Integer> i = new ArrayList<Integer>(); (2)ArrayList<Integer> i = new ArrayList<Integer>(); その類件としては以下があります。。 (3)Map y = new HashMap(); (4)HashMap y = new HashMap(); ご教授いただけますと幸いです。 宜しくお願いいたします。

  • Java
  • 回答数2
  • ありがとう数3

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

次のリンク先では親クラスの継承(extends)を話題にしていますが,インタフェースの実装(implements)についても同様です。 http://okwave.jp/qa/q7175470.html の私の過去の回答ANo.4, ANo.6 ということで, (1)の書き方が可能な理由は,ArrayListクラスが Listインタフェースを実装しているからであり, http://java.sun.com/javase/ja/6/docs/ja/api/java/util/ArrayList.html (3)の書き方が可能な理由は,HashMapクラスが Mapインタフェースを実装しているからです。 http://java.sun.com/javase/ja/6/docs/ja/api/java/util/HashMap.html

sarusaru1234
質問者

お礼

ご教授いただきましてありがとうございました。 添付いただいた過去の回答も非常に参考になりました。 これからも勉強していきたいと思います。 また、別の疑問にぶち当たりましたが、、 現在調査中です。。 最後に返信が遅れ誠に申し訳ございません。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

うーん、大事な概念の勉強を抜かしてきたようにお見受けします。 クラスの継承と多態性について勉強または復習しましょう。

sarusaru1234
質問者

お礼

回答いただきありがとうございます。 上記ご指摘いただきましてJavaを最初から見直ししていました。 #インスタンスの概念があまり理解できていなかったようです・・・ これからも勉強を続けて行きたいと思います。 最後に、返信が遅くなり申し訳ございません。。

関連するQ&A

  • ArrayList内HashMapの取得

    基本的で申し訳ないのですが一番下の行で リストの3つめの要素内のkey=key2でyeahをコンソールに出力したいです。 どのように取得すればいいのでしょうか? list.get(2).get("key2")っぽいかんじで... ArrayList list = new ArrayList(); for (int i = 0; i < 5; i++) { HashMap map = new HashMap(); map.put("key1", "hello"); map.put("key2", "yeah"); map.put("key3", "boo"); list.add(map); } System.out.println(list.get(2));

    • ベストアンサー
    • Java
  • Java。以下のソースをご覧下さい。

    配列ですが、現在の一覧表示を上位10件で表示したいのですが、教わって書いたソースのため、どう手をくわえればいいか分かりません・・・ ご教示お願いします。 //以下ソースです。ほぼ表示ロジックのみですが、足りなければ別途追記致します。 <前略> Iterator<String> ir = hsFlow.keySet().iterator(); while(ir.hasNext()){ ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(); list.addAll((new HashMap<String,Integer>(hsFlow)).entrySet()); Collections.sort(list,Collections.reverseOrder(new SampleSorter())); for(Map.Entry<String,Integer> m:list){ System.out.println(m.getKey()); System.out.println(m.getValue()); String f = ir.next(); Integer c = hsFlow.get(f); if(c==null) c = new Integer(0); System.out.println("回数"+f+":"+c.intValue()+"回"); //この回数表示の部分で回数の多い上位10件のみの表示にしたいと思っています。

    • ベストアンサー
    • Java
  • Javaコレクションフレームワークの、クラス型とインタフェース型の使い分けについて

    Javaコレクションフレームワークの、クラス型とインタフェース型の使い分けについてですが、 newで作ったインスタンスを、 クラス型に代入する場合と、インタフェース型に代入する場合があるのですが、どちらを優先して使ったほうがいいですか? ※物によっては、インタフェース型しかつかえないとか、どちらでも良い場合とかいろいろあると思います。 また、インタフェース型のほうがメソッドの種類が若干多いですが、抽象メソッドなのでオーバーライドして使うからそれは関係ないのかな。 ・本に出てきた例 ArrayList<E> list = new ArrayList<E>(); List<E> list = new ArrayList<E>(); Queue<E> queue = new LinkedList<E>(); LinkedList<E> list = new LinkedList<E>(); LinkedList<E> stack = new LinkedList<E>(); Set<E> set = new HashSet<E>(); Map<E, M> map = new HashMap<E, M>();

    • ベストアンサー
    • Java
  • HashMapについて

    質問させてください 以下に簡単なコードをJBuilderで作成しました。 printでブレークをはってmapインスタンスを評価してみると、mapに20個のキーが登録されるはずが、 16個しかいません。 この時点でstr1[16]が評価しても表示されていないのですが、map.get()で正常に取得はできています。 どのようなことが考えられるか、わかる型がいましたら教えてください。よろしくお願いいたします。 import java.util.*; class Test { public static void main(String[]args){ HashMap map = new HashMap(); String str1[] = new String[20]; String str2[] = new String[20]; for(int i = 0; i < 20; i ++){ str1[i] = new String(Integer.toString(i)); str2[i] = new String(Integer.toString(i * 10)); map.put(str1[i],str2[i]); } System.out.println("デバック用ブレーク"); System.out.println(map.get(str1[11])); } }

    • ベストアンサー
    • Java
  • ArrayListとHashMapを利用する問題について

    『問題』 (1)ArrayListのオブジェクトを生成する。 (2)「何回入力しますか?」と出力し、入力処理を行う。 (3)(2)で入力された回数分、以下の処理を行う。   1)HashMapのオブジェクトを生成する。   2)「名前を入力して下さい。」と出力し、入力処理を行う。 3)「性別を入力して下さい。」と出力し、入力処理を行う。   4)「性別を入力して下さい。」と出力し、入力処理を行う。 5) 1)で作成したHashMapに、それぞれ入力された 名前・年齢・性別を設定する。   6)値を設定したHashMapを(1)で作成したArrayListへ格納する。 (4)ArrayListの件数分、以下の処理を行う。   1)ArrayListより、HashMapを取得する。   2)取得したHashMapより、それぞれ設定されている 名前・年齢・性別を取得する。   3)HashMapより取得した名前・年齢・性別を出力する。 『実行結果』 何回入力しますか? 2 名前を入力して下さい。 iwata 年齢を入力して下さい。 27 性別を入力して下さい。 men 名前を入力して下さい。 hana 年齢を入力して下さい。 21 性別を入力して下さい。 women 名前=iwata 年齢=27 性別=men 名前=hana 年齢=21 性別=women 上記のようなプログラムを書く問題について質問します。 (3)までは自力で書けて実行結果もこの通りになったのですが、 (4)が分からずに、実行結果では値の部分がnullと出力されて しまいました。自分でもこの記述は間違っているというのは感じる のですが、どうしたら値がちゃんと格納されるのか分かりません。 「ArrayListより、HashMapを取得する。」←特にこの部分を どう記述してよいのか・・・ 分かる方、上記の部分の記述方法だけでも構わないので教えて下さい。 『自分で書いたプログラム』 import java.util.*; import java.io.*; public class Sample02{ public static void main(String[] args)throws IOException{ ArrayList list = new ArrayList(); System.out.println("何回で入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); for(int i=0; i<num; i++){ HashMap map = new HashMap(); System.out.println("名前を入力して下さい。"); String name = br.readLine(); System.out.println("年齢を入力して下さい。"); String age = br.readLine(); System.out.println("性別を入力して下さい。"); String sex= br.readLine(); map.put("名前", name); map.put("年齢",age); map.put("性別",sex); list.add(name); list.add(age); list.add(sex); } for(int i=0; i<num; i++){ HashMap map = new HashMap(); String name = (String)map.get("名前"); String age = (String)map.get("年齢"); String sex = (String)map.get("性別"); System.out.println("名前=" + name); System.out.println("年齢=" + age); System.out.println("性別=" + sex); } } }

    • ベストアンサー
    • Java
  • java のMAPをソートするとき

    以下のプログラムがあったとします、 Map<Integer, String> map = new HashMap<Integer, String>(); map.put( 0 , "abc" ); map.put( 4 , "efg" ); map.put( 1 , "hij" ); map.put( 3 , "klm" ); map.put( 2 , "npo" ); これで、mapのキーをソートするにはどうしたらいいでしょうか?

    • ベストアンサー
    • Java
  • MAPの配列・・・???!!!

    Mapというものを使うのが初めてなのですが、 よくわからなくなってしまいました。 他のプログラムから、 「MAPの配列で返ってくる」 のですが、このMAPの配列をintひとつ、ストリング2つから 作ろうとしているのですが、できずに困っています。 map[0]=("abc","ABC") map[1]=("def","DEF") map[2]=("ghi","GHI") ・ ・ みたいなイメージなのですが、エラーになります・・・ Map[] hairetu = new HashMap(); これでコンパイルできません。 HelloWorldMap.java:17: 互換性のない型 出現: java.util.HashMap 要求: java.util.Map[] Map[] hairetu = new HashMap(); Map[] hairetu; という宣言だけならできます。 受け渡し先でMapの配列を要求しているのでこのような形が必要なのですが・・・ ちなみにソースを見ると hairetu[i].get(キー) みたいなとり方をしています。

    • ベストアンサー
    • Java
  • javaの連想配列について教えてください

    お世話になります。 javaの連想配列について教えてください。 やりたいことは下記のようなデータを作成したいです。 ================================================ {   "shcool" : {          "class" : "A",          "yamada" : {                "class" : "AA",                "height" : 165,                "weight" : 60         },          "saitou" : {                "class" : "AB",                "height" : 170,                "weight" : 65         }   } } ================================================ 下記HPを参考してHashMap+HashMapで作成したのですがうまくいきません。 http://www.atmarkit.co.jp/fjava/javatips/081java010.html Map<String, Object> map = new HashMap<String, Object>(); map.put("school", new HashMap<String, Object>()); ((Map) map.get("school")).put("class", "A"); ((Map) map.get("school")).put("yamada", new HashMap<String, Object>()); ((Map) map.get("school")).get("yamada").put("class", "AB"); ・・・ としても下記エラーとなってしまいます。 ----------------------------------------------------- エラー: シンボルを見つけられません ((Map) map.get("school")).get("yamada").put("class", "AB");                            ^ シンボル: メソッド put(String,String) ----------------------------------------------------- 途中のschoolのvalueにHashMapを入れるところまではうまくいっているようですが、 yamadaのvalueにHashMapを入れて.put()の仕方がわかりません。。。 上記データをHashMap+HashMapで作成するにはどうしたらよいでしょうか? ぜひご教示いただけると嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Java NullPointerException

    簡単な配列を作っているのですが、現在のコードについてどうしても以下のエラーが解決できません。 java.lang.NullPointerException 今作っているコードは ArrayList<Integer> intList = new intList<Integer>(); intList.add(1); といういうようなシンプルなものです。 ArrayList<Integer>ではなく、int[]にしてもダメでした。(正直この2つの違いもよく分かっていません。) 解決方法(+よろしければ違いの説明も)を教えて頂ければと思います。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • お世話になります。下記のjavaの総称を詳しい方がいらっしゃいましたら

    お世話になります。下記のjavaの総称を詳しい方がいらっしゃいましたら、ぜひ教えてお願いします。 Class A{ private HashMap dataTable; private void a1(){ ArrayList its = (ArrayList)(dataTable.get(key1)); if (its==null){ its = new ArrayList(); its.add(new B) } ... dataTable.put(key1,its); } private void b1(){ ArrayList its = (ArrayList)(dataTable.get(key3)); if (its==null){ its = new ArrayList(); its.add(new C()) } ... dataTable.put(key4,its); } } B、Cはぞれぞれ違うObjectです。 JDK5をアップすると、HashMap,ArrayListの無検査呼びコンパイラ警告があって、総称に改修したいですが、改修するやり方をご存知の方がいらっしゃいましたら、ぜひ教えてくださいまして、非常に助かります。