JAVA関連のことを調べてみた2023年07月27日

JAVA関連のことを調べてみた2023年07月27日

java勉強メモ1

Javaのプログラムの構造

Javaのプログラムは次のような構造になっています:

大括りにクラスがあって、その中に
フィールド、コンストラクタ、メソッドを配置する。
## Javaのデータ型
Javaのデータ型は大きく2つに分けられます

基本データ型 (プリミティブ型)

整数型:

byte: 8ビット符号付き整数 (-128 から 127 までの範囲)
short: 16ビット符号付き整数 (-32,768 から 32,767 までの範囲)
int: 32ビット符号付き整数 (-2,147,483,648 から 2,147,483,647 までの範囲)
long: 64ビット符号付き整数 (-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの範囲)
小数型:

float: 32ビット単精度浮動小数点数 (約 7桁の有効数字を持つ)
double: 64ビット倍精度浮動小数点数 (約 15桁の有効数字を持つ)
真偽型:

boolean: 真 (true) または 偽 (false) の2つの値を

元記事を表示

ArrayListのcapacityを使いこなしてパフォーマンスを向上させる

## はじめに

Javaでリストを作成するとき、以下のように`new ArrayList<>()`と書いてインスタンスを作成する例をよく目にするかと思います。

“`java
List list = new ArrayList<>();
“`

しかし、以下のように`new ArrayList<>()`の()内に数値を記述してインスタンスを作成することもできます。

“`java
List list = new ArrayList<>(500);
“`

上記例の500にあたる部分が、`initialCapacity`と呼ばれる引数です。この`initialCapacity`を利用することで、リストの操作のパフォーマンスを向上させることができます。
この記事では、`initialCapacity`に関する情報と、その使い方について解説します。

## まとめ

記事が少し長くなってしまったので、先に結論を記載します。詳細については以降で説明していきます。

– **initialCapacityとは**
– ArrayListインスタンスは

元記事を表示

React + SpringBootアプリ 簡易まとめ

# 初めに

今回の記事ではReact、SpringBootを用いた旅行予約管理アプリケーションの作成を行った際に使用したコードを復習も兼ねて簡単にまとめていこうと思います。
今まではEclipseでコード編集を行っていましたが今回のアプリケーション開発ではフロントのコード編集にVC CodeとバックにはIntellijを使用しました。
環境構築などは[YouTube](https://www.youtube.com/watch?v=4LZKnegAm4g&list=LL&index=8&t=3405s)を参考にしました。

## フロント(React)からバック(Java)のAPI呼び出し
SpringBootを使用してアプリケーションを作成する際に使用するControllerに`@CrossOrigin`を使用します。
今回のReactアプリケーションではデフォルトのURL`http://localhost:3000`を使用しているのでControllerには`@CrossOrigin(“http://localhost:3000”)`とすればフロント側から指定のAPIのURLをた

元記事を表示

Javaの文字列の学習をしてみた(後編)

# 概要
Javaの文字列の学習をしてみました。以下のページを参考にしました。

文字列の先頭と末尾から空白文字を取り除く(String.trim,String.strip)

https://www.javadrive.jp/start/string/index8.html

文字列に含まれる文字を大文字または小文字に変換する(String.toUpperCase、String.toLowerCase)

https://www.javadrive.jp/start/string/index14.html

文字列の最後に別の文字列を連結する(String.concat)

https://www.javadrive.jp/start/string/index15.html

文字列の一部を別の文字や文字列に置換する(String.replace)

https://www.javadrive.jp/start/string/index16.html

指定した区切り文字で複数の文字列を連結し新しい文字列を作成する(String.join)

https://www.javadriv

元記事を表示

java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverterエラーがでる

# はじめに

ビルドをする際に突然エラーが出てしまったのでまとめていきます

# 問題

以下のエラーが発生するようになりました

“`
Exception in thread “main” java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter, compiling:(server.clj:1:1)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3700)
at clojure.lang.Compiler.compile1(Compiler.java:7609)
at clojure.lang.Compiler.compile1(Compiler.java:7599)
at clojure.lang.Compiler.compile(Compiler.java:7676)
at clojure.lang.RT.compile(RT.java:413)
at clojure.lang.RT.load(RT.java:458)
a

元記事を表示

gauge installでReason: Invalid plugin name or there’s a network issue while fetching plugin details.エラーが出る

# はじめに

時々、gauge javaのバージョンを変えるのですが、自分の記事に書いていなかったので自分用にまとめます

# 問題

以下のエラーが発生します
理由は謎ですので、直接バージョンを変えていきます

“`
$ gauge install java
Failed to install plugin ‘java’.
Reason: Invalid plugin name or there’s a network issue while fetching plugin details.
“`
# 解決方法

以下からほしいバージョンを取得します (javaで今回はやります)

https://github.com/getgauge/gauge-java/releases

ダウンロードしたら解凍します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/f8b07b34-623e-ea06-fc6c-e6f198f55c72.png)

3つありました
これを必要

元記事を表示

RestTemplateで外部のWeb APIにアクセスするクラスのテストを、MockRestServiceServerを使って書く

# やりたいこと
Springの`RestTemplate`で外部のWeb APIにアクセスするクラスのテストを書きたいです。しかしその場合、アクセス先のサーバーをどうやって用意するかが問題になります。

[WireMock](https://wiremock.org/)など、モックサーバーを用意するためのライブラリも存在します(個人的には使ったことないので詳しくは分かりません)。

今回はSpringで用意されている`MockRestServiceServer`を使ってみます。`MockRestServiceServer`は名前の通りモックサーバー機能を持つクラスです。`RestTemplate`と連携することができます。

# 環境
– JDK 17
– Spring Boot 3.1.2

> 将来のバージョンアップにより、内容が正しくなくなる可能性もあるので注意してください。

# サンプルコード
https://github.com/MasatoshiTada/mock-rest-service-server-sample

# Web APIの仕様
## GET /api/

元記事を表示

[Java] 文字列の連結

# 文字列の連結とは
* 2つ以上の文字列をつなげること
* 文字列の連結(concatenation)
“`java:例
String s = “日本語で” + “あそぼ”;
“`
* +演算子を使用する他にも連結する方法はある
* しかもその方が圧倒的に処理速度が高速
# +演算子が遅い理由
* Stringインスタンスが保持する文字列情報は、インスタンス化した際に初期化され、以後`二度と変化しない`
* 例えば「s = s + “World”;」が実行されたとして、String型変数sのサイズが大きくなり「”HelloWorld”」とはならない
* +演算子による連結が行われた瞬間、`古いインスタンスは捨てられ`連結後の情報を持つ`新しいインスタンがnewにより生成`、格納される
* 結果、+演算子による数万回の文字列連結は内部で数万回newすることを意味する(だから遅い)
# StringBuilderを用いた連結
## StringBuilderクラス
* StringBuilderクラスは可変(mutable)
* StringBuilderインスタンスは、内部に連結し

元記事を表示

オーバーライド

# オーバーライド

:::note
オブジェクト指向言語において、**サブクラス(派生クラス)が親クラスのメソッドを再定義して上書きすること
→サブクラスは親クラスのメソッドの振る舞いを変更したり、新しい機能を追加したりできる**
:::

## オーバーライドで重要な点

– **メソッドのシグネチャが親クラスと一致していること**
シグネチャ : メソッド名、引数の型、戻り値の型

– **サブクラスでオーバーライドするメソッドは、親クラスのメソッドと同じメソッド名と引数を持ち、戻り値の型も同じである**必要がある
→メソッドの処理内容や振る舞いはサブクラスで変更可能

## オーバーライドの例

“`java
class Animal {
void makeSound() {
System.out.println(“Animal makes a sound.”);
}
}

class Cat extends Animal {
// 親クラスのmakeSoundメソッドをオーバーライド
@Override
void ma

元記事を表示

【JavaGold】Filesクラスのlist、walk、findメソッドの比較

## 比較

以下の観点で比較する。

– 対象のファイルまたはサブディレクトリ
– 使用方法

#### 対象のファイルまたはサブディレクトリ
– `list()`:指定されたディレクトリ内の直下のファイルまたはサブディレクトリをリストアップする。**サブディレクトリは再帰的には走査しない。**

– `walk()`:指定されたディレクトリ内のファイルやサブディレクトリを**再帰的に走査し、全てのエントリをリストアップする。**

:::note info
`maxDepth`パラメータを使用して、再帰の深さを制御することができる。
:::

– `find()`:指定されたディレクトリ以下で**特定の条件に合致するファイルを再帰的に検索する。**
検索条件は`BiPredicate`インタフェースを使用して指定する。

#### 使用方法
– `list()`:**直下の**ファイルまたはサブディレクトリをリストアップしたい場合に使用する。

– `walk()`:ディレクトリ以下の**全ての**ファイルまたはサブディレクトリ

元記事を表示

【JavaGold】StandardOpenOption

## 概要
Java NIO.2(New I/O)パッケージでファイルの書き込み時に指定するオプションを定義する列挙型(Enum)である。
ファイルの書き込み時に特定のオプションを指定することでファイル操作の動作を制御することができる。

#### 主な定数

– `READ`:読み取りモードでファイルを開く。
ファイルを読み取るために使用する。
– `WRITE`:書き込みモードでファイルを開く。
ファイルに書き込むために使用する。
既存のファイルを開く場合、既存の内容を上書きする。

– `APPEND`:追記モードでファイルを開く。

– `CREATE`:ファイルが存在しない場合に、新しいファイルを作成する。

– `CREATE_NEW`:ファイルが存在しない場合に新しいファイルを作成する。
既にファイルが存在する場合は例外がスローされる。

– `DELETE_ON_CLOSE`: ファイルを閉じる際に、ファイルを自動的に削除する。

– `TRUNCATE_EXISTING`: ファイルをオープンする際に、既存の内容を削除する。

– `SYNC`:書き込んだデータをディ

元記事を表示

【JavaGold】resolveメソッド

## 概要
`java.nio.file.Paths`クラスの`resolve()`メソッドは、2つの`Path`インスタンスを結合して新しい`Path`インスタンスを作成する。
このメソッドは、パスの絶対・相対の関係にかかわらず、2つのパスを連結して新しいパスを作成する。

シグネチャは以下のようになっている。

“`java
public Path resolve(Path other)
“`

引数として結合したいもう一方の`Path`インスタンス(`other`)を受け取り、それらを結合した新しい`Path`インスタンスを返す。

##### 例
例えば、次のようなディレクトリ構造があったとする。

“`
root
├── dir1
│ └── file1.txt
└── dir2
└── file2.txt
“`

以下は、`Paths.resolve()`メソッドを使用して2つの`Path`インスタンスを結合している。

“`java
import java.nio.file.Path;
import java.nio.file.Paths;

pub

元記事を表示

操車場アルゴリズムを Java で実装してみた

# 操車場アルゴリズムとは
 我々人間に分かりやすいように書かれた数式(中置記法)を、プログラムで処理しやすい数式の形(後置記法)へ変換するアルゴリズム。
ダイクストラ法でお馴染みのエドガー・ダイクストラが考案したもの。

例として中置記法で `3 + 4` と示される式は、後置記法で `34 +` と表記することが出来る。

# 実装例
“`java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

class ShuntingYard {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();

元記事を表示

ディープコピー(だと思い込んでいたもの)

“`java
List a = new ArrayList<>();
a.add(“AAA”);

List b = a.subList(0,a.size());
b.add(“BBB”);

List c = new ArrayList<>(a.subList(0,a.size()));
b.add(“CCC”);

System.out.println(a);
System.out.println(b);
System.out.println(c);

/*
* [AAA, BBB]
* [AAA, BBB]
* [AAA, CCC]
*/
“`

~~普通に subList -> シャローコピー
subList したものをコンストラクタに渡す -> ディープコピー(もどき)~~
**subListは指定範囲の見かけを返すだけで、切り出してコピーしたりするわけじゃない。**
(追って更新します)
(@yoshi さんコメントでのご指摘ありがとうございます!)

元記事を表示

Leetcode 852. Peak Index in a Mountain Array

https://leetcode.com/problems/peak-index-in-a-mountain-array/description/

# アプローチ1
## Brute-force

“`java
class Solution {
public int peakIndexInMountainArray(int[] arr) {
int before = 0;
for (int i = 0; i < arr.length; i++) { if (before <= arr[i]) { before = arr[i]; continue; } return i - 1; } return before; } } ``` # アプローチ2 ## 二分探索 ```java class Solution { public int peakIndexIn

元記事を表示

missing return statement ~ complete normallyとcan complete normally ~

# 言い訳
筆者はJavaの授業をサボりました。
なるべく仕様書から引っ張ってきましたが、**私自身は信用ならない**ので警戒しつつお読みください。
Qiita初投稿です。

# TL; DR
– 制御フロー関連のエラーが出たら14.22 Unreachable Statements[(SE 20のやつ)](https://docs.oracle.com/javase/specs/jls/se20/html/jls-14.html#jls-14.22)を読もう
– ***complete normally***は実行時の話だよ
– ***can complete normally***はコンパイル時の話だよ
– 筆者にはcomplete normallyの必要性がわからなかったよ
– `error: missing return statement`って言われたら
returnするかthrowしよう

以降のコードはjavac 19、参照した仕様は[The Java® Language Specification
Java SE 20 Edition](https://docs.ora

元記事を表示

Javaの文字列について学習してみた

# 概要
Javaの文字列について学習してみました。以下のページを参考にしました。

文字列(Stringクラス)

https://www.javadrive.jp/start/string/

文字列を作成する

https://www.javadrive.jp/start/string/index2.html

数値を文字列に変換する

https://www.javadrive.jp/start/string/index11.html

文字列を数値に変換する

https://www.javadrive.jp/start/string/index12.html

文字列と文字列を比較する(String.equals)

https://www.javadrive.jp/start/string/index4.html

文字列と文字列の大きさを比較する(String.compareTo)

https://www.javadrive.jp/start/string/index13.html

文字列の長さを取得する(String.length)

https://www.ja

元記事を表示

[GCP] BigQueryの機能調査x実装

# GCPのBigQueryの概要と機能

## 概要
Google Cloud Platform(GCP)のBigQueryは、大規模なデータセットを効率的に保存し、クエリを実行するためのデータウェアハウスサービス。BigQueryは、高速でスケーラブルなデータ分析を実現し、ビジネスインテリジェンス(BI)や機械学習などの応用に利用される。また、クエリの実行結果のリアルタイムダッシュボードの作成や、ストリーミングデータの分析もサポートしている。

## 主な機能
### 1. ペタバイト規模のデータセットの格納
BigQueryは非常に大容量のデータセットを処理できる。データは、自動的に分散され、複数のサーバーで並列に処理されるため、スループットとパフォーマンスが最適化される。データの格納や管理についても、ユーザーが意識する必要はない。

### 2. スキーマレスなデータベース
BigQueryは、スキーマレスなデータベースとして機能する。データを格納する際、スキーマを事前に定義する必要はない。そのため、異様な形式のデータでも簡単に格納でき、また、JSONやAvro、Parquet

元記事を表示

github備忘録

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519817/33df0817-0188-97cb-b0a9-386cbe314d73.png)
リポジトリ作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519817/fbb16e46-18c5-b621-e9e1-c811ac3a0f9b.png)
public repositori name のみを入力し作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519817/835615c4-757a-f329-f876-3d59fa24de0f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519817/d2fc53

元記事を表示

【SpringBoot】図書の貸出管理システムを作りたい

# はじめに
前回までの内容で図書管理システムの設計しログイン機能を実装したので、それにChatGPTに質問しながらEclipseを使って開発をした流れを記事にしました

https://qiita.com/EasyCoder/items/d4c5da73ba922fb189e1

https://qiita.com/EasyCoder/items/3a717db1761ddd9d3ae0

## システム実装に必要なリソース

今回は図書の貸出登録機能を実装するため以下が必要になります

### 追加するテーブル
– 図書の情報(Booksテーブル)
– 貸出ユーザー管理(BorrowedBooksテーブル)
– 貸出履歴管理(BorrowHistoryテーブル)

### 追加する機能
– ブラウザで図書の一覧表示
– 図書の検索機能
– 貸出ボタン/返却ボタン
– 図書詳細閲覧

## 一覧表示機能の実装(Booksテーブルの実装)

### ファイル構造図(Booksクラス)
“`java:追加予定図
src/
main/
java/
com/

元記事を表示

OTHERカテゴリの最新記事