---
# System prepended metadata

title: Java対策

---

# Java対策
###### tags: `School`
## ラムダ式
- 一般にプログラミング言語で，名前のない関数(無名関数，匿名関数)をその場で定義したもの
- 関数型インタフェースのメソッドをその場で定義し，それによってできるクラスのインスタンスを直ちに生成
```
型名1 引数名1, ..., 型名n 引数名n) -> { ... }
(引数名1, ..., 引数名n) -> { ... }
引数名1 -> { ... }
() -> { ... }
```
## ストリーム
- ある単位のデータの要素の連続的な列を表現したもの
- 要素を受け取るたびに処理することで徐々に処理を進めることをストリーム処理という
- list.stream()or bReader.lines() 
###  中間操作
- list.stream().filter(name -> name.length() <= 4).toList()
## HashMap
- 3つの中で一番高速
- map.put(key,value)
- map.remove(key)
## ラッパークラス
- 頭文字大文字
- 基本型はp
- らっぱーはｗ
- **オートボクシング**　基本型からラッパー
- **アンボクシング**　ラッパー型から基本型
- こいつらのおかげで自動変換があるから書かなくておけ
- ボクシング(boxing) 参照型化
## ジェネリクス
- 型をパラメータとするクラスを作成する仕組み
```
class クラス名<型パラメータのリスト> {
 ...
}
```
## ArrayList
- 可変長配列
- 末尾での要素の挿入，削除が速い
- スタック（LIFO）
- 深さ優先 
## LinkedList
- アレイリストよりかは遅い
- 先頭，末尾での要素の挿入，削除が速い
- キュー（FIFO）
- 幅優先
## 制約充足問題
- 制約条件の集まりとして問題をモデル化
## 生成検査法
- 全部作ってみる
- 遅い、絶対だめ
## バックトラック法
- 制約に矛盾したらそれ以降の実行をおこわなわず、別の探索まで戻る（枝刈り）

## カプセル化
- クラスの一部のフィールドやメソッドをプログラムの特定の範囲のみで使うようにすること
- フィールドを、外部から使えないようにすることが多い
## アクセス制御
![image](https://hackmd.io/_uploads/H1y90mqKa.png)
- カプセル化のためにprivate
- サブクラス(同一ファイル内)protected
- 外部に公開するメソッド public
## アクセサ
- getter
- setter
## トップレベルクラス
- 一番外側のクラスのこと(継承とかしてない)
- 逆に内側のクラスを**ネストされたクラス(入れ子クラス)**
- 外部クラス名.入れ子クラス名
## 共有と**副作用**
- プログラムの複数の箇所で同一のオブジェクトが参照されているとき，オブジェクト(への参照)は共有されているという
- メソッドを呼び出す前後で，呼び出し元(または相当する箇所)のオブジェクトの内部状態に変更が生じることを副作用と呼ぶ
- 共有されてるときに、共有先で値が変更されるかもしれない(参照するだけではなく変更する可能性があり、意図しないバグを生みやすい)
## 不変性と可変性
- オブジェクトの内部状態は生成したときに決める
- その後は変更できなくする(カプセル化したものに近い)
- 変更できなくする(privateやprotected)ことをしなかったら、それは可変
- 不変にすると、副作用を防げる
- setterを外部から使えなくすることによって、変更を防ぐ
## レコード
- Recordのサブクラスrecord
- 不変なオブジェクトのクラスになる
```
record レコード名(ヘッダ) {
...
}

```
## ローカル変数
- ブロック内({})に宣言した変数
    - 他のメソッドから見れない、一時的な変数のイメージ
## var（ローカル変数型推論）
- var識別子で、null以外の初期値からいい感じの型を選んでくれる
    - 動的型付けではないため、一度型を推論したら他の型を入れることはできない
## 書き方の原則
- ガイドライン的なものだからさすがにでない気がする
- 軽く目を通せばおけ