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

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

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

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

解決済

javaで効率のよい書き方

settyan
settyan

総合スコア0

Java

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

6回答

0評価

0クリップ

3073閲覧

投稿2016/07/21 06:06

編集2022/01/12 10:58

いつもお世話になっております。

今回は効率化(?)について質問させていただきます。

###やりたいこと
String型の配列に入っている”2016/07/20”という文字列を使って2つのmapを作りたいんです。

例)

java

String[] list = { "2014/12/01", "2015/01/01", //~~~~~中略~~~~~~ "2016/05/01", } //上記のものを //下記の形に動的に書き換えたいのですが... private Map<Integer,String> years; private Map<String,List<String>> yearMonths; years.put("0", "2014"); years.put("1", "2015"); years.put("2", "2016"); yearMonths.put("2015", Arrays.asList("12")); yearMonths.put("2016", Arrays.asList("1","2",/*中略*/"11","12")); yearMonths.put("2017", Arrays.asList("1","2","3","4","5"));

自分で作ってみたはいいもののコレは実用化できるものなのか?と思い質問させていただきました。
ちなみに今はyearMonthsの中身が連続していますが後々虫食いになる可能性があるので動的に生成させています。

下記が自作で作ったものです。
※mDが上記のlistの代わりのものです。

java

//private Map<Integer,String> years; ...① //private Map<String,List<String>> yearMonths; ...② //②のList<String>の部分に入れ込む配列を生成 ArrayList<String> monthlist = new ArrayList<String>(); // ...③ for (int i = 0; i < mD.size(); i++){ if(i == 0){ /**初回*/ //最小年の①を作成 years.put(i,mD.get(i).getMonth().substring(0, 4)); //③に月を追加 monthlist.add(mD.get(i).getMonth().substring(5, 7)); }else{ /**二回目以降*/ //1つ前の配列と現在の配列で年の部分が同値でないかの判定 if(mD.get(i).getMonth().substring(0, 4).equals(years.get(years.size()-1)) ) { /**同値の場合*/ //③に月を追加 monthlist.add(mD.get(i).getMonth().substring(5, 7)); }else{ /**同値でない場合*/ //今まで月を追加してきた③のリストを使い②を作成する yearMonths.put(mD.get(i - 1).getMonth().substring(0, 4), monthlist); //挿入した③のリストはいらないので初期化 monthlist = new ArrayList<String>(); //次年度の①を作成する years.put(years.size(),mD.get(i).getMonth().substring(0, 4)); //③に月を追加 monthlist.add(mD.get(i).getMonth().substring(5, 7)); } if(i == mD.size()-1){ //最後に今まで月を追加してきた③のリストを使い②を作成する yearMonths.put(mD.get(i - 1).getMonth().substring(0, 4), monthlist); //挿入した③のリストはいらないので初期化 monthlist = new ArrayList<String>(); } } }

いかがでしょうか。

ご教授願います。

###追記
効率について追記させていただきます。

なるべく負荷のかからない形
もしくは
実行時間が短い形
の2点を想定しています。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

coco_bauer
coco_bauer

2016/07/21 06:13

「効率」の定義は? コードが短い(文字数が少ない)、実行時間が短い(実行が早い)など、視点が異なる様々な効率がありうるかと思うのですが。
settyan
settyan

2016/07/21 06:20

そうですよね... 何の効率を書かずになんて... 効率について追記させていただきました。 ご指摘ありがとうございました。
yuba
yuba

2016/07/21 06:21

Javaのバージョンは8ですか?
settyan
settyan

2016/07/21 06:30 編集

ご指摘ありがとうございます。 java8です。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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