Java プログラミングのmapの収納の仕方について
プログラミング(Java)の勉強をしているのですが正解もわからず苦戦しております。そこでプログラミングができる方に教えていただきたいです。
問題文に「全データを適切なListあるいはMapに収納せよ。」とあり、今回私はListを使ってデータ内容を収納しました。しかし、問題文からMapでも収納できるということがわかるのですがMapはキーの型名、値の型名を指定しなければなりません。ですが今回収納するデータはたくさんの文字が羅列してあるものであり、それのキーや値がよくわかりません。このように全データをMapに収納するにはどのようにすればいいでしょうか?
詳しく教えてほしいです。
写真のものは、Listやmapで収納する楽天市場レビューのサンプルデータです
≪問題文≫
楽天市場レビューのサンプルデータについて、レビュー1つ分を表すのに適切なクラスを作成せよ。
メインメソッドでデータ(TSV形式)の全てを読み込み、全データを適切なListあるいはMapに収納せよ。
ListあるいはMapに収納されたレビュー全てを、LIBSVM形式で書き出せ
作成したコード
package simonmon;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Simon10 {
public static void main(String[] args) {
try {
File csv = new File("C://Users/bi19029/documents/楽天サンプル/ichiba04_review201001_20140221-sample.tsv");
BufferedReader br = new BufferedReader(new FileReader(csv));
// 最終行まで読み込む
String line = "";
while ((line = br.readLine()) != null) {
// 1行をデータの要素に分割
StringTokenizer st = new StringTokenizer(line, ",");
while (st.hasMoreTokens()) {
// 1行の各要素をタブ区切りで表示
// System.out.print(st.nextToken() + "\t");
// System.out.println();
List<String> list = new ArrayList<>(); //list文
list.add(st.nextToken() + "\t");
System.out.println(list);
}
}
br.close();
} catch (FileNotFoundException e) {
// Fileオブジェクト生成時の例外捕捉
e.printStackTrace();
} catch (IOException e) {
// BufferedReaderオブジェクトのクローズ時の例外捕捉
e.printStackTrace();
}
}
}
No.1ベストアンサー
- 回答日時:
うーむ、これも良く分からんなぁ。
いや、データが手元にあればどうにでも出来るんだけど、写真じゃ小さいんで手作業で書き写すのもアレですし・・・・・・。
よってここでは一般論を。
JavaのMapってなんじゃらホイ、とか思ったんだけど、要するに「ハッシュテーブル」ですよね。イカしたプログラミング言語には大体これは実装されているデータ型です。ANSI Common Lispから始まって、Python、Rubyなんかにも実装されています。
難点は「プログラミング言語によって呼び名が違う」って事くらいでしょうか(笑)。だからJavaのMapって言われると「何のことやらサッパリ分からん」って事になってしまう。
いや、ハッシュテーブルです。それでキマリ。
ええと、原理的には元々こいつはリストなのです。「連想リスト」ってのが元ネタです。
恐らく原型を作ったLisp的な表記で書きますけど、元々はこんなヤツ(データ形式)なんですね。
'((プログラミングができない人 . "Java") (cametan42 . "Python"))
こういう「ペア」だけで構成されたリストを、これはもうそのままデータ型は「リスト」なんですが、形式として「連想リスト」と呼びます。
➜ ~ clisp
i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8
Welcome to GNU CLISP 2.49.92 (2018-02-18) <http://clisp.org/>
Copyright (c) Bruno Haible, Michael Stoll 1992-1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2018
Type :h and hit Enter for context help.
[1]> (defvar alist '((プログラミングができない人 . "Java") (cametan42 . "Python"))) ;; 連想リストを定義
ALIST
[2]> (assoc 'プログラミングができない人 alist) ;; 連想リストからキーを使ってデータを探す
(プログラミングができない人 . "Java")
[3]> (assoc 'cametan42 alist) ;; 連想リストからキーを使ってデータを探す
(CAMETAN42 . "Python")
[4]>
とまぁ、例えば「プログラミングができない人」と「Java」が関連付けられてたら「プログラミングができない人」で探せばそのデータが返ってくる。「cametan42」と「Python」が関連付けられてたらそのデータが返ってくる。
至極簡単ですね。そう、これは「検索の為の」データ型なんです。
ただ、リストの場合、長くなればなるほど、リストのケツの方へアクセスするのに時間がかかります。これがリストの欠点で、リストは先頭から順繰りに探っていくので、リストの最初の方のデータを返すのはすぐなんですけどね。
これを解決する為に「発想は連想リストなんだけど、実装はちょっと工夫しようぜ」と作られたデータ型がハッシュテーブルです。ただ、基本的な使い方とかは全く連想リストと同じです。
と言う事は、ですよ。
> ですが今回収納するデータはたくさんの文字が羅列してあるものであり、それのキーや値がよくわかりません。
要するに貴方が好きに決めて良いのです。はい。
キーを何にするか。検索した時何を返して欲しいのか。貴方が好きに決めて良い。
ただ、注意事項は一つだけ。それは当然、「同じキーが2つあったら、返せる値も返せない(ないしは貴方の予想と違う値が返ってくる)」。これには気をつけましょう。そしてこれは「言われりゃその通りだよな」って思うでしょう。
[4]> (push '(cametan42 . "Common Lisp") alist)
((CAMETAN42 . "Common Lisp") (プログラミングができない人 . "Java")
(CAMETAN42 . "Python"))
[5]> (assoc 'cametan42 alist)
(CAMETAN42 . "Common Lisp")
[6]>
[4]でデータを追加してますが、キー「cametan42」のデータが2つになりました。検索すると新しく追加したデータは返ってきますが、"Python"があるデータは無視されてそのままです。これは良くないですよね。
「キーはユニークであるべき」って事です。
さぁ、まずは手持ちのデータを良く見て下さい。何をキーとするべきなのか。それはユニークな値なのか。それは貴方が判断するべき事柄です。
あるいは「全部格納出来たらしたい」って思う場合もあるでしょう。その場合はハッシュテーブルのハッシュテーブルを作ったりして「木構造」を構築しなきゃいけません。
でもそれも、どっちにせよ「貴方が決める事」ですよね。そしてプログラミング以前にデータとにらめっこして、どういうデータ構造になってるのか、まず最初にそれがわからないとならない、って事ですよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Java Java 配列<選挙> 4 2023/07/31 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのマクロでワードのテキス...
-
教えて下さい
-
プログラミング python pandas ...
-
【エクセル】測定時間がバラバ...
-
VBA 毎日取得するデータを順番...
-
配列でデータが入っている要素...
-
LoadPictureしたイメージデータ...
-
ADOを使用してExcelデータをAcc...
-
30Gも使えるはずなのに全然ネッ...
-
シリアル通信でのデータ受信
-
[エクセル]データの個数が2番目...
-
文字の上下反転処理
-
C#でヒストグラムの作り方
-
Matlab:plotで特定の値だけをプ...
-
ActiveReportについて
-
ディベートに関して質問です。...
-
[VBA] CountIfに変数を使いたい
-
エクセルについて
-
MATLAB:データの総数を数えるに...
-
テーブル2列目に2番目のデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報