JAVA関連のことを調べてみた2020年01月16日

JAVA関連のことを調べてみた2020年01月16日

LinkedListとArrayList

##リストって
脳死でArrayList使っていたけれど、実はいろいろあるらしい

“`LinkedArrayListTest.java
package listTest;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class LinkedArrayListTest {

public static void main(String[] args) {
measure(1000000);
}

private static void linked(int num) {
List list = new LinkedList<>();
for (int i = 0; i < num; i++) { list.add("asd"); } } private static void array(int num) { List list = new ArrayList<>();
f

元記事を表示

Spring Boot(Spring Web MVC + Tomcat)におけるSameSite Cookie

Spring Boot(Spring Web MVC + Tomcat)でSameSite Cookieを使うにはどのようにすればいいか、調べてみました。

## SameSite Cookieとはなにか

MDNのドキュメントを参照してください。

– https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies#SameSite_cookies_experimental_inline

## TomcatのSameSite Cookie対応

TomcatではCookieをHTTPレスポンスへ書き出すため`javax.servlet.http.Cookie`から文字列へのシリアライズを行います。
シリアライズは`org.apache.tomcat.util.http.CookieProcessor`インターフェースを通じて行われます。
実装クラスとして`org.apache.tomcat.util.http.Rfc6265CookieProcessor`が用意されていますが、この`Rfc6265CookieProcessor`クラスの

元記事を表示

RやRStudioでJava (jdk)のバージョンが高すぎてh2oライブラリが使えなかったのを解決した話

#動機
久しぶりに書いたと思ったらまたPATHの話です。
Mac向け。Winの人はごめんね。
学校でR環境下でh2oという深層学習ライブラリを使えという課題が出た際に私だけjdkのバージョンが引っかかって課題が進まなかったのを解決した怒りの手記。

#解決方法
#####R環境下で使うjdkのバージョンを下げる。以下、具体的手法。

####今Javaは何がいくつ入ってんの?

Rコンソールではなくターミナルを起動し、

“`
/usr/libexec/java_home -V
“`
と打ち込んで調べよう。入っているJavaのバージョンが全て出てきます。こういう感じです。
スクリーンショット 2020-01-16 2.32.45.png

####h2oライブラリが使えるjdkを持ってる?

h2oライブラリ

元記事を表示

アルゴリズム 体操16

#Merge Sort
マージソートはソートアルゴリズムの中でもdivide&conquerを使った有名な一つですね。
再帰的に分割していき、再び併合(マージ)していくことで、並び替えを実現しようとする、ソートアルゴリズムです。
今回はそのマージソートを使って配列ではなく、Linked Listをソートしてみたいと思います。

##例
![Screen Shot 2020-01-15 at 7.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/fd8ce790-da1f-52aa-e3f6-75b1649d4dae.png)

##Solution

###Runtime Complexity O(n(log(n))
n 個のリストとをマージするには n に比例した時間がかかります。(merge)
また、n 個のデータを1個ずつになるまで2分割していくには log(n) 時間がかかります。(divide)
したがって、実行時間は O(n log(n)) となります。
###Memo

元記事を表示

【備忘録】統合開発環境Eclipseでjavaプログラムを実行~gitを使ってみた

#【備忘録】統合開発環境Eclipseでjavaプログラムを実行~gitを使ってみた

初めて統合開発環境Eclipseをインストールし、「Hello world!」の出力までできたので、
そのコードをgithubにpushしてみた。

今後Eclipseを使用していくにあたり、備忘録として残しておく。

1. github上にリモートリポジトリを作成
1. githubの画面右上部の「+(プラス)」ボタンを押下し、**New Repository**を選択
2. **Repository name**にリポジトリの名前を入力し、**Create repository**を押下

2. 「新規Javaプロジェクト」の作成
1. メニューより[ファイル]→[新規]→[その他]を選択。ウィザードが出てきたら[Javaプロジェクト]を選択して次へをクリック。
2. 「関連付けられたパースペクティブを開きますか?」のウィンドウがでてきたら「はい」を選択。
3. 「新規Javaプロジェクト」ウィンドウが表示されるので、[プロジェクト名]欄に、任意のプロジェクト名をつけて「完了」ボタンを

元記事を表示

Javaプログラマ(4年目)が今まで買った技術書の棚卸しとオススメ度

#初投稿です
前々から投稿したかったけど、怖くてできませんでした。慣らすためにとりあえず書こうと思いました。
#買った本の棚卸し
買った本の個人の棚卸し的目的も含むため、特定の用途でまとめての紹介ではございません。
ほぼ全て紙の本です。自分は技術書って電子書籍だと読みにくい
また完全に個人の感想です。

あとなんか画像勝手に持ってくるのはいやだし、Amazonのリンク貼るのもいやだし、自分の撮った写真は汚いしで面倒になったので本の画像はなしでお送りします。

★=1点
☆=0.5点

#1.リーダブルコード
**オススメ度:★★★**

言わずと知れた超有名な本。
新人の頃に初めて先輩に勧められて、とりあえず買ってワケ分からなくて途方にくれた思い出深い逸品。もはや御守り的にカバンに入れて持ち歩くような存在。

中身に関しては新人にはハードルが少し高く感じた。「このように書くと良いよ」を紹介してくれるのはすごく良いのだが、「もっとJavaとして書くときの書き方を教えてくれよ!」と当時は思っていた。

ただなんだかんだ書いてある内容は今も実践しているつもりだし、かなり良い本。
#2.ベター

元記事を表示

JUnitでprivate scopeなものをテストする方法

## private scopeなものをテストする
Javaでprivate scopeのフィールド、メソッド、内部クラスを外部から呼び出し、
JUnitでテストしてみます。
※何番煎じか、出涸らしかという記事です。

まず、JUnitでテストしようとしてみます。

![error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533981/e667302e-da43-2797-0c48-b0d5600840a5.png)

コンパイルエラーです。仕様です。実行できません。
privateなので、publicと同じようには呼び出せません。

そこでReflectionを使ってprivate scopeなものを呼び出します。

## Reflectionとは
Reflectionとは、Javaの標準ライブラリの一種で
クラスそのものの情報を扱うことです。
具体的な例として、
クラス名、メソッド名、フィールド名の文字列で
そのクラスを生成、メソッド実行、フィールドへのアクセスが
できたりします。

以下、外

元記事を表示

NLP4J [007] で kuromoji を利用する Annotator を作成する

# 形態素解析のモジュールを使い分ける

NLP4J では標準(nlp4j-core)においてYahoo!デベロッパーネットワークの形態素解析処理を利用しています。

テキスト解析:日本語形態素解析 – Yahoo!デベロッパーネットワーク
https://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html

Yahoo!デベロッパーネットワークのAPIはHTTPで呼べるので便利ではありますが、回数制限があるという弱点もあります。
そこでローカルでも使える [kuromoji ](https://www.atilika.com/ja/kuromoji/) を利用するライブラリを作成することにします。

# Annotator の作成

今回は nlp4j プロジェクトのサブモジュール(sub module)として nlp4j-kuromoji を作成しました。

nlp4j-kuromoji
https://github.com/oyahiroki/nlp4j/tree/master/nlp4j/nlp4j-kuromoji

# Cla

元記事を表示

JSP-サーブレットのMVCモデルとリダイレクト・フォワード、スコープについて

#MVCモデル
 Model,View,Controllerモデルの略で、それぞれ「処理」「結果表示」「統括」を担当する。
 ユーザ側のリクエストをコントローラが受け、コントローラはモデルにデータ処理を依頼し、モデルは処理したデータをコントローラに返し、そのデータはビューに渡され、ビューは成形してユーザにレスポンスとして返す、といった形になる。

 サーブレット・JSP環境では、コントローラをサーブレットクラスが、ビューをJSPが、モデルを通常のJavaのクラスが行うことが多い。
 こうする利点の一つに、複数分野にまたがる知識がなくても分担して開発することができる、という利点がある。

01.png

#フォワードとリダイレクト
 サーブレットクラスからJSPやほかのサーブレットクラスにページを遷移する方法として、

元記事を表示

【Mockito】ランダム生成の文字列を使ったdo whileループを検証する

# 問題
Mockitoを使って単体テストを作成中
以下のようなコードのテストに悩んでいた…

* ユーザーIDを生成
* 既存ユーザとIDが重複していたら生成し直す
* 生成したIDでSELECTしてEntityが取得できた場合は重複しているとする。

“`java
private String generateUserID() {
String userId;
do {
// ランダム8桁の文字列を作成
userId = RandomUtil.getRandomString(8);
// 作成したuserIDが既に使用されてなければループを抜ける
} while (userRepository.findByUserId(userId) != null);
return userId;
}
“`

Repository部をスタブ化してSELECTの戻り値を設定することでテストする。

“`java

// Entityが取得できるパターン
when(userRepository.findBy

元記事を表示

Java + MySQLで簡易掲示板を作る

![board.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/44aafca8-4c47-98a7-814f-4ba20f3e45ef.png)

mysqlを使った簡易的な掲示板を作りました。

##概要
・ID、名前、コメント、タイムスタンプを掲示板に表示する。
・名前かコメントが未入力だとエラーメッセージがポップアップする。

##苦労したところ
・DBに格納したデータを取り出す方法がわからなかった。
最初は配列で別々にID、名前、コメント、タイムスタンプを取り出そうとしたが上手くできなかった。
ArrayListならインスタンスまるごと格納できる!

・ArrayListの中身をjspで取り出す方法がわからなかった。
EL式で取り出そうとしたが上手くできなかった。
JSTLのcoreタグライブラリで`forEach`を使って取り出すことができた。

・mysql接続時にtime zoneエラーが出る。
下記を参考に接続URLを変更。日本時間にしたい場合は末尾をJSTに変更する。
[

元記事を表示

Javaでいいね機能の実装

![iineko.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/290f2b85-4b6b-7484-e3dc-f9db743d30fc.png)

アウトプットはどんどんした方がいいらしいので、初めて作ったいいねアプリの公開をします。
MVCモデルで作りました。
##概要
画像をクリックするといいねこ!が増えます。
値はアプリケーションスコープに保存しています。
https://iineko.herokuapp.com

##苦労したところ
1、HTMLから画面遷移せずに値を送る方法がわからずに四苦八苦しました。
[画面遷移せずにHTMLで値を送る方法](https://qiita.com/parapore/items/227782c252af6ab5aa03)

2、いいねを押しても1以上にならない。
いいねされる度に毎回newしていたので初回起動判定を入れた。

3、クラスをまたいでインスタンスを渡す方法がわからなかった。
YoineServelet.javaで`Yoine y =

元記事を表示

画面遷移せずにHTMLで値を送る方法

画面遷移せずにGETで値を送る方法のメモです。

##HTMLで値をGET送信
a href=”URL?属性名=変数名”

“`html



“`

##Javaで値を受け取る
request.getParameter(“属性名”)
sは文字列「sample」を受け取ります。

“`java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String s = request.getParameter(“action”);
“`

元記事を表示

NLP4J [006-034b] NLP4J で言語処理100本ノック #34 「AのB」の Annotator を作ってみる

# 改善すべき点

[NLP4J [006-034] NLP4J で言語処理100本ノック #34 「AのB」](https://qiita.com/oyahiroki/items/f4eeb31e073136f494d9) では「AのB」を抽出する処理を直接コードで書いていました。以下の部分です。

“`java
// 「AのB」を探す
String meishi_a = null;
String no = null;

for (Keyword kwd : kwds) {
if (meishi_a == null && kwd.getFacet().equals(“名詞”)) {
meishi_a = kwd.getLex();
} //
else if (meishi_a != null && no == null && kwd.getLex().equals(“の”)) {
no = kwd.getLex();
} //
else if (meishi_a != null && no != null && kwd.getFacet().equals(“名詞

元記事を表示

FreeMarkerでSpring Security JSPタグを使う

# やりたいこと
FreeMarker上で、 `` などのJSPタグを使いたい。https://vorba.ch/2018/spring-boot-freemarker-security-jsp-taglib.html で紹介されていたことを、自分でも確認したい。

FreeMarkerには元々、JSPタグを使う機能があるらしい。→ [参考URL](https://freemarker.apache.org/docs/pgui_misc_servlet.html#autoid_63)

# 環境
– AdoptOpenJDK 11.0.5
– Spring Boot 2.2.2.RELEASE
– Spring Security 5.2.1.RELEASE
– Embedded Tomcat 9.0.29
– FreeMarker 2.3.29

# 依存性

“`xml:pom.xml


org.spring

元記事を表示

[Android] MySQLに接続する(未完)

##JDBCダウンロード
AndroidからDBに直接接続できないので、JDBCドライバが必要になる。
MySQLインストール時にしなかった方は、こちらのConnecter/Jというリンクからダウンロード・インストールできる。
https://dev.mysql.com/downloads/

C:\Program Files (x86)\MySQL\Connector J 8.0の階層にmysql-connector-java-8.0.18.jarがあるので、これをビルドパスに追加する。

##ビルドパス設定
jarファイルをapp/libsの下に追加。
さらにbuild.gradleに以下を追加。

~~~gradle
dependencies {
compile files(‘libs/mysql-connector-java-8.0.18.jar)
}
~~~
その後、おそらく同期ボタンが出てくるので同期する。

・参考URL
https://qiita.com/icchi_h/items/8ce738ce8511ef69c799

##パーミッション
ネットワークを

元記事を表示

図でもっとわかりやすく学ぶ!!Webアプリケーションの模範的な構造MVCモデルとは?

##MCVモデルとは?
Webアプリケーションの開発では、**サーブレットクラス**と[**JSPファイル**](https://qiita.com/Yuriko-Y/items/06a16dde3d85ec83342b)を組み合わせて作成します。組み合わせることで効率よく開発することができます。
組み合わせて開発する際に参考にされるのが**MVCモデル**です。
つまり…
**アプリケーションの内部構造のお手本やガイドラインのようなもの。**
もう少しちゃんと言うと…
**GUIアプリケーションのための模範的な構造**です。
サーブレットやJSPによるWebアプリケーションも基本的にGUIアプリケーションです。
##MVCモデルにおける開発の3つの要素
MVCモデルは、アプリケーションを3つの要素(モデル、ビュー、コントローラ)に分けて開発します。以下の表に役割をまとめてあります。

| 要素 | 役割 |
|:—————–|:——————|
| モデル(Model) |アプリケーショ

元記事を表示

VScodeでJavaウェブアプリケーション開発環境構築(struts2)

VSCodeでJavaのWebアプリケーション開発ができるように開発環境を整えたい。
開発したものはVSCodeからコンパイルして実行したい。デバッグもしたい。テストもしたい。
と色々調べ、使用しているもの全てにおいて初心者なので苦労しましたが、
なんとか実行可能な環境が完成したのでまとめます。
少しでも同じようなことをしたい方の助けになれば幸いです。

この記事内では紹介しておりませんが、Tomcatを使用してデバッグも可能です。

#動作環境
  ・macOS Catalina 10.15.2
  ・Visual Studio Code 1.41.1
  ・AdoptOpenJDK 1.8.0_232
  ・Maven 3.6.3
  ・Tomcat 9.0.30

#JAVA_HOME設定
これまでOracle提供のJDK1.8.0_221を利用していたのですが、
このタイミングでAdopt提供のOpenJDK1.8.0_232をインストールしたのでまずはこちらを使うためにパスを通します。

“`terminal:ターミナル
$ open ~/.bash_profile
`

元記事を表示

組み合わせ計算(フェルマーの小定理、事前計算による高速化)(Java)

# はじめに

フェルマーの小定理を利用した組み合わせ計算の理論と、javaの実装例を書きました。
また複数回組み合わせを求める際に利用する、事前計算による高速化の実装例も載せています。
実装例はソースに貼り付けて汎用的に利用できます。

# 計算方法

**組み合わせ $_nC_r$ の求め方**

* nが小さい時

パスカルの三角形を用いて行います。
n=4000くらいまでは計算できます。
考え方や実装例は[こちら](https://qiita.com/naru7sh/items/7f3f47fbf2e415c0ec86)に書きました。
ただしnが小さくても、modを法として計算できる時は、nが大きい時と同様にフェルマーの小定理を用いて計算して良いです。

* nが大きい時

nが大きい時の組み合わせは、ある大きな素数modの法の元で計算します。
modを法にするとき、n!やr!などもオーバーフローしないまま計算できるので、以下の公式通りに計算することができます。

“`math
nCr=\frac{n!}{r!{(n-r)!}}
“`

ただしmod計算では割り算を自由に

元記事を表示

【Java】ファイステルネットワークの実装

###【概要】
共通鍵暗号方式の1つであるDESでは、ファイステルネットワークという構造を使用しています。
簡単に説明すると、ラウンド関数という関数と排他的論理和を使用した暗号化方式です。
DESでは入力の平文は64ビット、鍵のビット長は56ビットなどの決まりがありますが、今回はファイステルネットワークを実装してみたかっただけなので、そのような制約は排除しています。

[[参考]WikipediaでのFeistel構造の説明](https://ja.wikipedia.org/wiki/Feistel%E6%A7%8B%E9%80%A0)

###【コード】
ここで掲載しているコードは、下記リンク先のGitHubに載せています。
[feistelNetwork](https://github.com/nobu12/feistelNetwork)

“`java:Main.java
package main;

import common.AbstractEncryption;
import encryption.Decryption;
import encryption.Encryp

元記事を表示

OTHERカテゴリの最新記事