質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1630閲覧

【JavaのMapについて/{}について】ソースコードのイメージが湧かない

ypk

総合スコア83

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2020/08/28 23:15

こんにちは。現在Javaの学習をしているものです。

下記のソースコードが何を意味しているのかがイメージ湧かず苦戦しています。
以下2点について、ご教授いただきたく思います。どうぞよろしくお願いいたします。

###1つ目

String replace(Map<String, List<String>> table);

とはいったい何を意味しているのでしょうか?

Mapは「キー」と「値」を対応付けする

という知識まではありますが今回は値が配列であることもあり対応付けが1対多となりどういうこととなのかいまいちよくわかりません。

キーであるStringに複数のString(値)が対応付けられる

という認識で間違いないでしょうか。

どうぞよろしくお願いいたします。

###2つ目

Replacer(CharSequence cs){key = cs.toString}

とは何を意味しているのでしょうか。メソッドですかね?だとしたら{}はいったい何者なのでしょうか、、、、
どうぞよろしくお願いいたします。

###ソースコード

Java1

1import java.util.List 2import java.util.Map 3 4public interface Fragment{ 5 String replace(Map<String, List<String>> table); 6}

Java2

1import java.util.List 2import java.util.Map 3 4public class Replacer implements Fragment{ 5 final String key; 6 7 Replacer(CharSequence cs){key = cs.toString} 8 9 public String replace(Map<String, List<String>> table){ 10 return String.join("\n", table.get(key)); 11 } 12} 13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2020/08/28 23:30 編集

コンストラクターに誤りがあります。 {key = cs.toString} {key = cs.toString();} オリジナルは、Kotlin、Scalalかもしれませんが。
ypk

2020/08/28 23:40

ご指摘ありがとうございます。ちょっと違うかもしれません、、、 基本情報技術者試験平成30年秋午後問題11の問題を引用しています。
m.ts10806

2020/08/28 23:49

試験なら「そういうもの」として答えだけ覚えるしかないこともあります。
ypk

2020/08/28 23:56

なるほど、、、そうなのですね。割り切りみたいなのも必要なのでしょうか⁇ 試験に向けて、ソースコードを一つ一つ読み解いて学習していこうとしていました。
m.ts10806

2020/08/28 23:59

はい。試験は選択肢のものであれば答えは決まってますので。 もちろんあくまで試験は実力確認のためとして本質は技術者としての向上は必要ですから、「根本的な理解をしたい」というのは分かります。 でしたら、単に読むより手元に環境作って実際に動かしてみるのが吉です。
dodox86

2020/08/29 00:05

>@質問者さん > ご指摘ありがとうございます。ちょっと違うかもしれません、、、 > 基本情報技術者試験平成30年秋午後問題11の問題を引用しています。 ご覧になっているテキストの誤記だと思います。IPAの提供しているオリジナルの過去問題ですと、xbemeさんのご指摘どおり、Javaのコンストラクタとして正しく記載されています。 https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30.html#30aki https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30_2/2018h30a_fe_pm_qs.pdf
ypk

2020/08/29 00:13

m.ts10806さん ご丁寧にありがとうございます。完全な理解に固執せず、適度な理解と実践を通して学びます。ありがとうございました。
ypk

2020/08/29 00:14

dodox86さん ありがとうございます。理解しました。 ; が抜けていたという意味ですね、、、ご丁寧にありがとうございました。
dodox86

2020/08/29 00:20

> ; が抜けていたという意味ですね セミコロンのみならず、"()"も、です。()が無かったらそのクラスのフィールド扱いになるので、やはりNGです。
guest

回答2

0

ベストアンサー

簡単な2つ目の質問だけ。

xebmeさんが既に書かれていますが、コンストラクターです。
以下のように書いてあれば理解できますか?(セミコロン等勝手に補完)

Java

1 Replacer(CharSequence cs){ 2 key = cs.toString(); 3 }

投稿2020/08/28 23:40

編集2020/08/28 23:43
javahack

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javahack

2020/08/28 23:47

1つ目についてはジェネリクスの知識があれば読み解けると思います。
ypk

2020/08/28 23:55

ありがとうございます! なるほど、、、たしかに、この形なら見覚えあります。 ①クラスReplacerにコントラクタReplacerを生成する。 ②CharSequence型の変数csを引数としてセットする まではパッと理解できたのですがそのあとがちょっとあやふやですね、、、 to Stringメソッドを実行した結果得られた値をkeyに格納している という認識で間違い無いでしょうか?
javahack

2020/08/28 23:59

その認識で大丈夫です。
ypk

2020/08/29 00:15

ありがとうございます。ジェネリクスについて、早速勉強してみます。
guest

0

実際にテストコードを書いてみれば理解しやすいのではありませんか?

Java

1import java.util.*; // Map, HashMap, List, ArrayList 2 3interface Fragment { 4 String replace(Map<String, List<String>> table); 5} 6 7class Replacer implements Fragment { 8 final String key; 9 10 Replacer(CharSequence cs){ 11 key = cs.toString(); 12 } 13 14 public String replace(Map<String, List<String>> table){ 15 return String.join("\n", table.get(key)); 16 } 17} 18 19class Test { 20 public static void main(String[] args) { 21 List<String> ls1 = new ArrayList<>(); 22 ls1.add("abc"); ls1.add("def"); 23 24 List<String> ls2 = new ArrayList<>(); 25 ls2.add("pqr"); ls2.add("stu"); ls2.add("xyz"); 26 27 Map<String, List<String>> tbl = new HashMap<>(); 28 tbl.put("key1", ls1); 29 tbl.put("key2", ls2); 30 31 Replacer rpl = new Replacer("key2"); 32 33 String str = rpl.replace(tbl); 34 System.out.println(str); 35 36 System.out.println("--"); 37 System.out.println(new Replacer("key1").replace(tbl)); 38 } 39}

ファイルを一つにしたかったので、interface や class の public は省略しています。
実行結果

text

1pqr 2stu 3xyz 4-- 5abc 6def

投稿2020/08/29 05:26

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問