- 投稿日:2021-01-05T22:02:18+09:00
【Java】Mapの使い方
プログラミング勉強日記
2021年1月5日
JavaでのMapの扱い方を簡単にまとめる。Mapとは
Mapはキーと値の2つの要素からなる複数のデータを格納できるものである。キーは値に名前を付けるようなもので、値の1つ1つにキーが存在する。このキーと値がペアになっているのがMapの特徴である。そのため、Mapから値を探すときにキーを目印に探すことができる。
HashMapで初期化する方法
Mapはインターフェースなので、インスタンスを生成するにはそれを実装したクラスを使用しないといけない。Mapのインスタンスを生成するのによく使われているのが、HashMapクラスである。
HashMapクラスを使って宣言する方法Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();宣言するときにはキーと値のデータ型を指定する必要がある。
サンプルコードimport java.util.HashMap; import java.util.Map; public class Sample { public static void main(String[] args) throws Exception { // キーをInteger、値をStringにする場合 Map<Integer, String> map = new HashMap<>(); } }Mapでよく使用するメソッド
putメソッド
Mapにデータを追加できるメソッドで、第1引数にキー、第2引数に値を指定する。
サンプルコードimport java.util.HashMap; import java.util.Map; public class Sample { public static void main(String[] args) throws Exception { Map<Integer, String> map = new HashMap<>(); map.put(1, "田中"); map.put(3, "鈴木"); map.put(5, "山田"); } }getメソッド
Mapに格納したデータを取得することができるメソッドで、引数にキーを指定することでそのキーの値を取得できる。
サンプルコードimport java.util.HashMap; import java.util.Map; public class Sample { public static void main(String[] args) throws Exception { Map<Integer, String> map = new HashMap<>(); map.put(1, "田中"); map.put(3, "鈴木"); map.put(5, "山田"); System.out.println(map.get(1)); System.out.println(map.get(3)); System.out.println(map.get(5)); } }実行結果田中 鈴木 山田keySetメソッド
Mapに含まれるキーの値を返すメソッド。今回はkeySetメソッドを使ってMapのすべてのキーを出力する方法を紹介する。
サンプルコードimport java.util.HashMap; import java.util.Map; public class Sample { public static void main(String[] args) throws Exception { Map<Integer, String> map = new HashMap<>(); map.put(1, "田中"); map.put(3, "鈴木"); map.put(5, "山田"); for(Integer key:map.keySet()) { System.out.println(key); } } }実行結果1 3 5valuesメソッド
valuesメソッドは、定義したMapや列挙子をまとめて受け取ることができる。Mapの値を全て取得する場合はvaluesメソッドを使う。
サンプルコード```java:サンプルコード import java.util.HashMap; import java.util.Map; public class Sample { public static void main(String[] args) throws Exception { Map<Integer, String> map = new HashMap<>(); map.put(1, "田中"); map.put(3, "鈴木"); map.put(5, "山田"); for(String values: map.values()) { System.out.println(values); } } }実行結果田中 鈴木 山田参考文献
【初心者向け】Javaのmapの使い方を解説!サンプルコードも紹介!
【Java入門】Mapの使い方総まとめ(HashMapで初期化、値のソート)
- 投稿日:2021-01-05T15:17:46+09:00
IntelliJでunitテストしようとしたときに"java.lang.OutOfMemoryError: Java heap space"といわれた
起こったこと
ある日intellijでjavaのunitテストをしようとしたところ。。。
java.lang.OutOfMemoryError:
というエラーが、、、
調べてみるとそこそこ情報はあったのですが、割とハマったので備忘録として対応方法を残しておきます。やったこと
今回は2つの方法をやりました
1つめ
メニューバー > IntelliJ IED > Preferences > Compiler
のShared build process VM options:
に-Xmx2048m
を追加
このやり方が調べてて一番多く出てきた方法です2つめ
unit testの実行ボタンから一番下のModify Run Configuration
を選択
このような画面が出てくるのでここのVM options
のところに-Xmx2048m
を入れapplyするまとめ
調べていると割と1つめのやり方で解決している方が多そうだったのですが、なぜか僕は2つめのやり方をしないと解決しなかったのでもし参考になる方がいらっしゃれば嬉しいです
参考文献
https://stackoverrun.com/ja/q/7802559
https://www.366service.com/jp/qa/986b19e266eaaafb99b2f2ccddd3378c
- 投稿日:2021-01-05T13:49:48+09:00
Android アプリ開発時の参考資料集
概要
とあることから、Google Maps APIを使用したAndroidアプリを作成することになったので、
参考にしたリンクを備忘録のために纏めました。環境編
前提
Androidコードディング規約
もしあなたが急にAndroidアプリを業務で作るはめになった場合の選択肢(2021年初頭版)Android Studio
Android studio の Gradleについて調べてみた
Android Studioでの外部ライブラリの読み込み方と注意点ドキュメント
Javadocの作成方法を現役エンジニアが解説【初心者向け】
設計編
コーディング編
パーミッション
Androidパーミション別-何してんの?#5 NETWORK編
設定画面のインテントアクションまとめ画面遷移
[Android] 10分で作る、Navigationによる画面遷移
最初のActivityに戻る
Fragmentによる画面遷移でハマった
Fragmentで、パラメータ付きの画面遷移を実装するView要素
Button
[Android] Button のonClickListenerの設定が色々できる件
Fragment
Fragment自身を終了させる
AndroidStudioの標準デザインパターンで分かるFragment入門
AndroidでFragmentの結果をActivityで受け取るHTTP通信
GPS関連
Callback・マルチスレッド・タスク
Handler
Handler と Looper
Handlerの使い方を紹介する
AndroidでTimerを使わずHandlerだけでお手軽に定期実行してあげる
Handlerクラスの正しい使い方(Androidでスレッド間通信)
幸せな非同期処理ライフを満喫するための基礎から応用まで
【Java】Handlerクラスについてまとめてみました
【Android】HanlderとMessageを使ってマルチスレッドの処理結果を受け取るTask
スレッドセーフ
ライフサイクル
onCreate と onStart と onResume の違い
知らずに作って大丈夫?Androidの基本的なライフサイクルイベント31選
Androidの画面設計や遷移に関して整理してみるその他
プログレスバー
Androidでプログレスダイアログを使用して、処理を行う
【Android】ProgressDialogがDeprecatedになっている理由、正しく理解してます?Maps API編
GoogleMapsAPI
Google Maps Platform ドキュメント
地図オブジェクト
AndroidのアプリにGoogle Mapを組み込む
Android - Polyline encoding algorithm?まとめ
とりあえず、リンクを羅列しましたが、各リンクから何が得られるのか、余裕があり、気力が沸いたら書こうとおもいます。
- 投稿日:2021-01-05T13:49:48+09:00
Android アプリ開発した際の躓きポイントを纏めてみた
概要
とあることから、Google Maps APIを使用したAndroidアプリを作成することになったので、
参考にしたリンクを備忘録のために纏めました。環境編
前提
Androidコードディング規約
もしあなたが急にAndroidアプリを業務で作るはめになった場合の選択肢(2021年初頭版)Android Studio
Android studio の Gradleについて調べてみた
Android Studioでの外部ライブラリの読み込み方と注意点ドキュメント
Javadocの作成方法を現役エンジニアが解説【初心者向け】
設計編
コーディング編
パーミッション
Androidパーミション別-何してんの?#5 NETWORK編
設定画面のインテントアクションまとめ画面遷移
[Android] 10分で作る、Navigationによる画面遷移
最初のActivityに戻る
Fragmentによる画面遷移でハマった
Fragmentで、パラメータ付きの画面遷移を実装するView要素
Button
[Android] Button のonClickListenerの設定が色々できる件
Fragment
Fragment自身を終了させる
AndroidStudioの標準デザインパターンで分かるFragment入門
AndroidでFragmentの結果をActivityで受け取るHTTP通信
GPS関連
Callback・マルチスレッド・タスク
Handler
Handler と Looper
Handlerの使い方を紹介する
AndroidでTimerを使わずHandlerだけでお手軽に定期実行してあげる
Handlerクラスの正しい使い方(Androidでスレッド間通信)
幸せな非同期処理ライフを満喫するための基礎から応用まで
【Java】Handlerクラスについてまとめてみました
【Android】HanlderとMessageを使ってマルチスレッドの処理結果を受け取るTask
スレッドセーフ
ライフサイクル
onCreate と onStart と onResume の違い
知らずに作って大丈夫?Androidの基本的なライフサイクルイベント31選
Androidの画面設計や遷移に関して整理してみるその他
プログレスバー
Androidでプログレスダイアログを使用して、処理を行う
【Android】ProgressDialogがDeprecatedになっている理由、正しく理解してます?Maps API編
GoogleMapsAPI
Google Maps Platform ドキュメント
地図オブジェクト
AndroidのアプリにGoogle Mapを組み込む
Android - Polyline encoding algorithm?まとめ
とりあえず、リンクを羅列しましたが、各リンクから何が得られるのか、余裕があり、気力が沸いたら書こうとおもいます。
- 投稿日:2021-01-05T01:09:31+09:00
【Eclipse】Version 1.8.0_261 of the JVM is not suitable for this product. Version: 11 or greater is required エラー
Pleiades All in One Javaをダウンロード
手順に従って、ファイルを解凍
pleiades/eclipse/eclipe.exeと進んだところVersion 1.8.0_261 of the JVM is not suitable for this product. Version: 11 or greater is required
といったエラーが出て、eclipseを起動できませんでした
【解決策】
まずこちらの動画を参考にしました
https://www.youtube.com/watch?v=CgwpdheXvlseclipse.iniファイル(画像の下から3番目、名前はeclipseとしか書いてないのでわかりづらい)を編集
-vm
Javaのバージョンを指定のように書いてありましたが、Javaのファイルは、Pleiaes All in Oneであればインストールされていないので、バージョンが分かりません
そこで
pleiades/eclipse/readme/eclipse.iniこちらのファイルにはすでに
-vm
Javaのバージョン情報が載っていたので、この2行をコピーして、先ほどの
pleiades/eclipse/eclipse.ini
のファイルにペーストすれば解決しました。
- 投稿日:2021-01-05T00:17:36+09:00
【Android】 DB上に保存しているレコードをCSV形式(カンマ区切り)で保存する。
ご挨拶
かなり久々の投稿になります。少し雑談から。急ぎの方は横の目次からジャンプしてください。
2020年は今まで生きてきた中である意味衝撃的でエキセントリックな1年でした。
皆さんも環境の変化やコロナへの不安などで、心が落ち着かない毎日を過ごされたかと思います。自分も働く環境など、いろんなものが今までからガラッと180度変わった1年でした。
まさか、BTSにハマるなんて思いもしなかったし。(この投稿を書きながら今も聞いています。)そんな中でもこの投稿を(ひいてはQiitaを)見に来られた方は、何かしらのシステム(アプリ)を自分の手で作り出すことに夢中になっている方かとお見受けします。
自分が嫌になることが多いこの職業ですが、「自分はできる!」と信じて頑張って欲しいです。
自分が投稿しているものは深い技術のものではなく、素人程度の技術をシンプルに応用しているものが
多いです。
まだまだ勉強中の身ですが、アプリ開発をされている方の少しでもお役に立てれば幸いです。今回の目的
DB上に保存しているレコードをCSV形式(カンマ区切り)で保存して、そのデータを取り込むまでの
一連の流れを実装したい。色々方法を模索したが、SAF(StorageAccessFramework)を今回採用した。
というよりも、これからのバージョンはこの方法が主流になるらしい。(Android4.4以降)→ Open files using storage access framework -developer.android-
使用する環境
- AndroidStudio Ver 3.4.1
- Android 10.0 (Q) API 29
Permisson(アクセス権限)
注意しないといけないのは、Android6.X(API 23)以降からPermission(アクセス権限許可)をユーザに通知しないといけないこと。
今回はストレージにアクセスするので、ストレージへのアクセス権限をユーザに許可してもらわないといけません。
ストレージにアクセス出来ないというのは致命的なので、この機能を実装する前にその部分を実装してください。
詳細は以下のサイトを参考にしてください。(時間が空けばこの部分も記事にします。)エクスポート編
では「エクスポート」から。
下記は別アプリケーションで保存先を指定するためのクラス。MainActivity.javapublic void fileopen_for_SAF() { try { //ファイル名を作成。 StringBuilder fileName = new StringBuilder(); fileName.append(/* 好きな名前 */); fileName.append("_"); fileName.append(getToday()); //ここで作成日時を取得。 fileName.append(".csv"); //「Intent.ACTION_CREATE_DOCUMENT」は、ファイルを選択するためのIntent。 Intent it = new Intent(Intent.ACTION_CREATE_DOCUMENT); //ここで取得するファイルの種類を制限する。(今回はALLタイプ) it.setType("*/*"); //ファイル名をセットして、Intentを起動。 it.putExtra(Intent.EXTRA_TITLE, fileName.toString()); /* 「CREATE_DOCUMENT_REQUEST」は、Private intで予め定義しておく。 */ startActivityForResult(it, CREATE_DOCUMENT_REQUEST); } catch (Exception e) { e.printStackTrace(); }作成日付取得クラス。(Calendarクラスをインポートする必要あり。)
作成結果は「(好きな名前)_2021_01_0500_15.csv」みたいに作成されます。MainActivity.javaprivate String getToday() { try { StringBuilder today = new StringBuilder(); today.setLength(0); //日付の設定 dd = Calendar.getInstance(); today.append(dd.get(Calendar.YEAR)); today.append("_"); today.append(dd.get(Calendar.MONTH) + 1); today.append("_"); today.append(dd.get(Calendar.DAY_OF_MONTH)); today.append("_"); today.append(dd.get(Calendar.HOUR)); today.append("_"); today.append(dd.get(Calendar.MINUTE)); return today.toString(); } catch (Exception e) { e.printStackTrace(); } return null; }インテントの結果は、「onActivityResult」に返ってくる。
他にインテントの結果が返ってくるようなものがあった場合のことを考えて、requestCodeは、エクスポート用に変数を分けておく。MainActivity.javaprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { /* 「CREATE_DOCUMENT_REQUEST」は、Privateで予め定義しておく。 */ if (requestCode == CREATE_DOCUMENT_REQUEST) { //エクスポート if (resultCode == RESULT_OK) { Uri create_file = data.getData(); //取得した保存先のパスなど。 //出力処理を実行。その際の引数に上記のUri変数をセットする。 if (exportCsv_for_SAF(create_file)) { //出力に成功した時の処理。 } else { //出力に失敗した時の処理。 } } else if (resultCode == RESULT_FAILED) { //そもそもアクセスに失敗したなど、保存処理の前に失敗した時の処理。 } } //リストの再読み込み this.LoadData(); super.onActivityResult(requestCode, resultCode, data); }実際に出力を行うクラス。
DB部分はご自分の環境に合わせて作成してください。MainActivity.javapublic Boolean exportCsv_for_SAF(Uri openFile) { try { OutputStream os = getContentResolver().openOutputStream(openFile); OutputStreamWriter os_write = new OutputStreamWriter(os, Charset.forName("Shift_JIS")); //後々インポートする際に困るのでエンコードを指定しておく。 PrintWriter pw = new PrintWriter(os_write); StringBuilder rec = new StringBuilder(); //Export_data用 //Read Data /* ここにExportするデータを取得するためのDBインスタンスなどを記述する。*/ StringBuilder sql = new StringBuilder(); sql.setLength(0); sql.append(/* 取得用のSQL */) c = db.rawQuery(sql.toString(), null); while (c.moveToNext()) { rec.setLength(0); rec.append(/* 取得カラムデータをExport用Builderにセット。 */); /* ↑をExportするカラム分呼び出す。*/ pw.println(rec.toString()); //Export } //基本的に開けたら閉める。 c.close(); pw.close(); os_write.close(); os.close(); } catch (SQLiteException e) { e.printStackTrace(); return false; } catch (FileNotFoundException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } finally { if (db.isOpen()) { db.endTransaction(); } } return true; }とりあえずここまで。
インポート編
- 制作中
終わりに
ここまでお疲れ様でした。というより疲れた。
データのインポート/エクスポートをするという目的なだけで色々調べる事になったので、勉強になりました。
一番シンプルに実装するとこの記事のようにできますので、ご自分で工夫してぜひお試しください。
他にも「アプリケーションが独自のストレージを提供すること」などができるみたいなので、時間がある時に試してみます。P.S.
インポート編は時間がある時に追記します。参考サイト