Comparisons

Java一般(いっぱん) (てき) なクラスと概念(がいねん)比較(ひかく) (ひょう)

ArrayList vs Vector

FeatureArrayListVector
Thread-Safetyデフォルトで() 同期(どうき)デフォルトで同期(どうき)
Performanceより効率(こうりつ) (てき) 、シングルスレッドアプリケーションに(てき) している同期(どうき) により(おそ) い、マルチスレッドアプリケーションに(てき) している
Growth Rate必要(ひつよう)(おう) じてサイズを増加(ぞうか)通常(つうじょう) 50%または2(ばい)必要(ひつよう)(おう) じてサイズを増加(ぞうか)通常(つうじょう) 2(ばい) )、成長率(せいちょうりつ)指定(してい) 可能(かのう)
LegacyJava Collections Frameworkの一部(いちぶ)汎用(はんよう) シナリオで推奨(すいしょう)(もと) のJava Collectionクラスの一部(いちぶ) 、レガシークラスとみなされる

Comparable vs Comparator

AspectComparable (I)Comparator (I)
Purposeオブジェクトが自然(しぜん)順序(じゅんじょ)定義(ていぎ) できるカスタムソート順序(じゅんじょ)定義(ていぎ) する(べつ) クラスを提供(ていきょう)
Interface Methodint compareTo(T o)int compare(T o1, T o2)
Sorting Orderオブジェクトは自然(しぜん)順序(じゅんじょ) でソートされるカスタムソート順序(じゅんじょ)定義(ていぎ) 可能(かのう)
Sortingsオブジェクトは1つの自然(しぜん) なソート順序(じゅんじょ) のみ(こと) なるソート順序(じゅんじょ)(たい) して複数(ふくすう) のComparatorを定義(ていぎ) 可能(かのう)
Implementation比較(ひかく) されるオブジェクトのクラスによって実装(じっそう)(べつ) のクラスによって実装(じっそう)
Usageソートメソッドによって暗黙(あんもく) (てき)使用(しよう)(れい) : Collections.sort()ソートメソッドに明示(めいじ) (てき)(わた)
Multiple Sortingソート順序(じゅんじょ)変更(へんこう) するにはcompareTo()メソッドを修正(しゅうせい)ソート順序(じゅんじょ)変更(へんこう) するには(べつ) のComparatorを作成(さくせい)使用(しよう)
Example文字列(もじれつ) リストを辞書(じしょ) (じゅん) でソートカスタムオブジェクトを特定(とくてい)属性(ぞくせい) でソート
(もと) のクラスに影響(えいきょう) する(もと) のクラスに影響(えいきょう) しない
  • Comparable

    • Use Case : クラスのインスタンスをデフォルトでソートしたい場合(ばあい)辞書(じしょ) (じゅん)数値(すうち)(おお) きさなど)、ソートロジックがほとんどの場合(ばあい) () わらない場合(ばあい)使用(しよう)
  • Comparator

    • Use Case : (こと) なる属性(ぞくせい)条件(じょうけん) でソートしたい場合(ばあい) 、またはクラスのcompareToメソッドを修正(しゅうせい) したくない場合(ばあい)使用(しよう)

Callable vs Runnable

FeaturesCallableRunnable
Return value(あたい)(かえ) せる(もど)() なし
Exception handling検査(けんさ) 例外(れいがい) をスロー可能(かのう)検査(けんさ) 例外(れいがい) をスローできない
Method signatureV call() throws Exceptionvoid run()
Used inFutureThread

StringBuffer vs StringBuilder

KeyStringBufferStringBuilder
バージョンJava 1Java 5
同期(どうき)YesNo
性能(せいのう)スレッドセーフ、(おそ)スレッドセーフでない、StringBufferより(はや)
保存(ほぞん) 場所(ばしょ)HeapHeap
  • StringBuffer :
    • override equalsがない、Object equalsは==でメモリアドレスを比較(ひかく)
    • StringBuffer文字列(もじれつ) とString文字列(もじれつ)比較(ひかく)意味(いみ) がない、Object equalsは(おな)(かた) のオブジェクトが前提(ぜんてい)

Lock vs Synchronized

  1. Synchronizedブロックは単一(たんいつ) のメソッド(ない)(ふく) める必要(ひつよう) がある。lock.lock()lock.unlock()(こと) なるメソッドから()() せる。
  2. lock.lock()lock.unlock()は、synchronizedブロックの(はい) りと()(おな) じvisibilityとhappens-before保証(ほしょう)提供(ていきょう)
  3. Synchronizedブロックは(つね) にリエントラント。Lockはそうでない可能性(かのうせい) がある。
  4. Synchronizedブロックは公平性(こうへいせい)保証(ほしょう) しない。Lockは可能(かのう)
LockSynchronized
メソッド(かん)
ロック取得(しゅとく)(こころ) みる
公平(こうへい) なロック管理(かんり)
待機(たいき) スレッドのリスト

例外時のロック解放

  • Lock
// Situation 1
lock.lock();
doSomethingNifty(); // Throws exception
lock.unlock(); // Oh no, we never release the lock!

// Situation 2
try {
    lock.lock();
} finally {
    lock.unlock(); // need write unlock() in finally
}
  • Synchronized
synchronizedコードブロック(ない)例外(れいがい)発生(はっせい) した場合(ばあい) 、JVMは現在(げんざい) のスレッドが取得(しゅとく) したすべてのロックをスマートに解放(かいほう) し、catchブロックで例外(れいがい)処理(しょり) されるまで実行(じっこう) スタックをアンワインドし、処理(しょり) されない場合(ばあい) はスレッドを終了(しゅうりょう) する。

LinkedList vs Array

ArrayLinked List
格納(かくのう) 構造(こうぞう)(おな)(かた) のデータを格納(かくのう)格納(かくのう) されるObject(ない) にDataとPointer((つぎ) のNodeを() す)が(ふく) まれる
メモリ格納(かくのう) 位置(いち)要素(ようそ)連続(れんぞく) したメモリ位置(いち)存在(そんざい)要素(ようそ) はメモリ(ない) のランダムな位置(いち)格納(かくのう)要素(ようそ)(つぎ)要素(ようそ)()
メモリ空間(くうかん)宣言(せんげん)必要(ひつよう)制限(せいげん) なし
アクセス方法(ほうほう)indexで検索(けんさく)先頭(せんとう) からデータを(さが)必要(ひつよう) あり
利点(りてん)Search O(1)、高速(こうそく) なデータ検索(けんさく)追加(ついか)削除(さくじょ) がArrayより簡単(かんたん) 、O(1)
メモリ効率(こうりつ)()
欠点(けってん)追加(ついか)削除(さくじょ) には配列(はいれつ) 全体(ぜんたい)移動(いどう)必要(ひつよう) 、O(N)の時間(じかん) がかかるSearch O(N)、indexがないため先頭(せんとう) から検索(けんさく)
pointerを格納(かくのう) する追加(ついか) メモリが必要(ひつよう)

List.of vs Arrays.asList

OperationsSINGLETONLISTLIST::OFARRAYS::ASLISTJAVA.UTIL.ARRAYLIST
add✔️
addAll✔️
clear✔️
remove✔️
removeAll❗️❗️✔️
retainAll❗️❗️✔️
replaceAll✔️✔️
set✔️✔️
sort✔️✔️✔️
remove on iterator✔️
set on list-iterator✔️✔️