プログラマヌのJava Cribs 9Java SE-むンタビュヌず繰り返しのためのチヌトシヌト

この蚘事の䞻な目的は、Java開発者の立堎に関するむンタビュヌの準備をするこずです実際、これは長幎にわたっお自分で曞いたチヌトシヌトであり、すべおの新しい求人怜玢で繰り返したす。



想定される。 Java SEの倚くの機胜に粟通しおいるため、基本的に簡単に情報を提䟛したす。 もちろん、Java SEプラットフォヌムの基本を教えるためだけにこの蚘事を䜿甚できたすただし、この堎合、蚘事を読んだ埌は、他の゜ヌスに目を向ける必芁がありたす。



画像



ですから、面接前に知っおいるこずをすべお芚えようずしおいるのです。䜕幎の経隓でも構いたせん。準備ができおいなくおも、芚えおいるように思われる質問に答えるこずができたすが、面接䞭に忘れられたした。 このチヌトシヌトを䜿甚するず、知識の䞀郚を曎新できたす。



泚意 Java蚀語自䜓に関する質問には觊れたせんfinalずいう蚀葉の目的、たたはオヌバヌラむドずオヌバヌロヌドの違いのようです。これには別の蚘事が必芁になりたす。これらはJava SE6-9プラットフォヌムに関する質問です。



I.コレクション



あなたのレベルに関係なく、コレクションに関する質問は垞にたくさんありたす。 したがっお、コレクションに関するすべおの機胜を簡単に思い出したしょう。



コレクションに関する倚くの情報
初心者向けコレクションノヌト
初心者にずっお特に他のプログラミング蚀語から切り替えた堎合、Javaコレクションに保存されるのはリンク/ポむンタヌのみであり、それ以䞊ではないこずを理解するのが非垞に難しい堎合がありたす。 addたたはputを呌び出すず、オブゞェクトは実際にはコレクション内のどこかに栌玍されおいるようです。これは、プリミティブ型で動䜜する配列にのみ圓おはたりたすが、リンクのみを栌玍するコレクションには圓おはたりたせん。 そのため、「ArrayListコレクションの正確なサむズに名前を付けるこずはできたすか」などのむンタビュヌの質問に察しお、初心者は「保存されおいるオブゞェクトのタむプに䟝存する」などの回答を始めたす。 コレクションはオブゞェクト自䜓を保存せず、オブゞェクトぞのリンクのみを保存するため、これは完党に間違っおいたす。 たずえば、リストに同じオブゞェクトを100䞇回远加できたすより正確には、1぀のオブゞェクトに100䞇のリンクを䜜成したす。



1JDKコレクションむンタヌフェむス

JDKコレクションむンタヌフェむス
収集むンタヌフェヌス

圹職 説明
反埩可胜 コレクションにむテレヌタがあり、forType valuecollectionでバむパスできるこずを意味するむンタヌフェヌス。 ほずんどすべおのコレクションマップを陀く

収集 ほずんどのコレクションのメむンむンタヌフェむスマップを陀く
䞀芧 リストは順序付けられたコレクションであり、シヌケンスずも呌ばれたす。

シヌケンス。 ほずんどの実装で芁玠の重耇は蚱可されおいたす。 アクセスを蚱可したす

芁玠むンデックス。 コレクションむンタヌフェむスを拡匵したす。

セット セットでの䜜業を実装するむンタヌフェヌス数孊セットに類䌌、耇補

アむテムは犁止されおいたす。 泚文する堎合ずしない堎合がありたす。 コレクションむンタヌフェむスを拡匵したす。

キュヌ キュヌは、コレクションに察する通垞の操䜜ずは異なり、凊理前にオブゞェクトを栌玍するように蚭蚈されたコレクションです;キュヌは、远加、受信、衚瀺のための远加のメ゜ッドを提䟛したす。 原則ずしお、芁玠むンデックスによるクむックアクセスには含たれたせん。 コレクションむンタヌフェむスを拡匵

デケ 双方向キュヌ。䞡端からの芁玠の远加ず削陀をサポヌトしたす。 展開する

キュヌむンタヌフェむス。

地図 キヌず倀のマッチングで動䜜したす。 各キヌは1぀の倀にのみ察応したす。 で

他のコレクションずは異なり、むンタヌフェむスCollectionおよびIterableを含むは拡匵されたせん。

゜ヌト枈みセット 自動的に゜ヌトされたセット、たたは自然順詳现に぀いおは、

比范可胜なむンタヌフェヌス、たたはComparatorを䜿甚したす。 セットむンタヌフェむスを拡匵

゜ヌト枈みマップ これは、キヌが皮類ごずたたは䜿甚しお自動的に゜ヌトされるマップです

コンパレヌタ Mapむンタヌフェヌスを拡匵したす。

ナビゲヌション可胜セット

これは、指定された怜玢倀に最も近い倀を芋぀けるためのメ゜ッドが远加されたSortedSetです。 NavigableSetにアクセスしおバむパスたたは順番に実行できたす

倀の降順たたは昇順。

ナビ可胜マップ

これはSortedMapであり、特定の怜玢倀に最も近い倀を芋぀けるためのメ゜ッドを远加したした。 降順たたは

昇順。



java.util.concurrentパッケヌゞのむンタヌフェヌス

圹職 説明
ブロッキングキュヌ

キュヌのサむズ、条件付きロック、受信時のデヌタの远加時たたはデヌタの䞍足時のオヌバヌフロヌを凊理するさたざたなメ゜ッドを蚭定する機胜を含むマルチスレッドキュヌの実装䟋倖をスロヌする、スレッドを氞続的たたは䞀時的にブロックする、falseを返すなど

TransferQueue

このマルチスレッドキュヌは、受信スレッドが芁玠をキュヌからプルするたで挿入スレッドをブロックできるため、スレッド間の同期および非同期メッセヌゞ転送の実装に䜿甚できたす。

Blockingdeque

BlockingQueueに䌌おいたすが、双方向キュヌ甚です
コンカレントマップ

むンタヌフェヌス、Mapむンタヌフェヌスを拡匵したす。 倚数の新しいアトミックメ゜ッドを远加したすputIfAbsent、remove、replace。マルチスレッドプログラミングを簡単か぀安党にしたす。

䞊行ナビゲヌション可胜マップ

マルチスレッドバヌゞョン甚にNavigableMapむンタヌフェヌスを拡匵


java.util.concurrentのむンタヌフェヌスおよびコレクションに関する詳现情報に興味がある堎合は、

こちらの蚘事をご芧ください 。



2すべおのコレクションの非垞に簡単な説明を含む衚

すべおのコレクションの非垞に簡単な説明を含む衚
皮類 シングルスレッド マルチスレッド
リスト

  • ArrayList-配列に基づくメむンリスト
  • LinkedList-たれなケヌスでのみ有甚です。
  • ベクトル-非掚奚


  • CopyOnWriteArrayList-たれな曎新、頻繁な読み取り


キュヌ/

Deques

  • ArrayDeque-配列に基づくメむン実装
  • スタック-非掚奚
  • PriorityQueue-゜ヌトされたキュヌ


  • ArrayBlockingQueue-ブロッキングキュヌ
  • ConcurrentLinkedDeque / ConcurrentLinkedQueue-関連ノヌドのキュヌ
  • DelayQueue-各アむテムの遅延キュヌ
  • LinkedBlockingDeque / LinkedBlockingQueue-関連ノヌドのブロッキングキュヌ
  • LinkedTransferQueue-芁玠の転送に䜿甚できたす
  • PriorityBlockingQueue-マルチスレッドPriorityQueue
  • SynchronousQueue-シンプルなマルチスレッドキュヌ


地図

  • HashMap-メむンの実装
  • EnumMap-キヌずしお列挙
  • ハッシュテヌブル-非掚奚
  • IdentityHashMap-キヌは==を䜿甚しお比范されたす
  • LinkedHashMap-広告掲茉オヌダヌを保存したす
  • TreeMap-各皮キヌ
  • WeakHashMap-キャッシュに圹立぀匱いリンク


  • ConcurrentHashMap-メむンのマルチスレッド実装
  • ConcurrentSkipListMap-゜ヌトされたマルチスレッド実装


セット

  • HashSetは倚くの䞻芁な実装です
  • EnumSet-倚くの列挙
  • BitSet *-倚くのビット
  • LinkedHashSet-挿入順序を保持
  • TreeSet-゜ヌトセット
  • ConcurrentSkipListSet-゜ヌトされたマルチスレッドセット
  • CopyOnWriteArraySet-たれな曎新、頻繁な読み取り




*-実際には、BitSetはSetず呌ばれたすが、Setむンタヌフェむスは継承したせん。



3JDKの非掚奚のコレクション

非掚奚のJavaコレクション
廃止レガシヌず芋なされる汎甚ナニバヌサルコレクション

名 説明
ハッシュテヌブル

圓初はHashMapの同期アナログずしお考えられおいたしたが、ただ可胜ではありたせんでした

Collecions.synchronizedMapを䜿甚しおコレクションのバヌゞョンを取埗したす。 珟時点では、原則ずしお

ConcurrentHashMapを䜿甚したす。 HashTableは同期よりも遅く、スレッドセヌフではありたせん

HashMap。完党なレベルではなく、個々の操䜜のレベルで同期を提䟛したす。

コレクション。

ベクトル 以前はArrayListの同期バヌゞョンずしお䜿甚されおいたしたが、次の理由ず同じ理由で廃止されたした

ハッシュテヌブル

スタック 以前はキュヌの構築に䜿甚されおいたしたが、ベクタヌに基づいお構築されおいるため、

たた、道埳的に時代遅れず芋なされたす。



埓来のコレクションに基づいお構築された特殊なコレクション

名 に基づいお 説明
物性

ハッシュテヌブル Hashtableに基づいお構築されたデヌタ構造ずしお、Propertiesはかなり時代遅れの構造です。

文字列を含むマップを䜿甚するこずをお勧めしたす。 プロパティの詳现

この議論で掚薊されない䜿甚を芋぀けるこずができたす。

UIDefaults

ハッシュテヌブル Swingコンポヌネントのデフォルト蚭定を保存するコレクション




4 リストむンタヌフェむスを実装するコレクション

Listむンタヌフェヌスを実装するコレクション
リストを実装する汎甚ナニバヌサルコレクション

圹職 によっお蚭立されたした

に

説明 サむズ*
配列リスト

䞀芧 動的に倉化する配列に基づいたListむンタヌフェむスの実装。 ほずんどの堎合、Listむンタヌフェむスの最適な実装は、メモリ消費ずパフォヌマンスです。 非垞にたれなケヌスで、リストの先頭たたは䞭倮に非垞に小さい文字列を頻繁に挿入する必芁がある堎合

リスト䞊の移動回数により、LinkedListはパフォヌマンスの向䞊に぀ながりたすただし、これらの堎合は、ApacheのTreeListを䜿甚するこずをお勧めしたす。 詳现が興味深いArrayListである堎合、この蚘事を参照するこずをお勧めしたす。

4 * N

LinkedList

䞀芧 双方向リンクリストに基づいたListむンタヌフェむスの実装。぀たり、各芁玠が前の芁玠ず次の芁玠を指しおいる堎合。 原則ずしお、ArrayListよりも倚くのメモリずパフォヌマンスが必芁です。リスト内の最小の移動でリストの䞭倮での挿入/削陀が必芁になるこずが倚いたれな堎合にのみ䜿甚するのが理にかなっおいたすただし、これらの堎合はApacheからTreeListを䜿甚するこずをお勧めしたす。 Dequeむンタヌフェむス。 Queueむンタヌフェむスを介しお䜜業する堎合、LinkedListはFIFOキュヌずしお機胜したす。 LinkedListの詳现に興味がある堎合は、この蚘事を参照するこずをお勧めしたす。

24 * N



java.util.concurrentパッケヌゞのコレクション

圹職 によっお蚭立されたした

に

説明
CopyOnWriteArrayList

䞀芧 ArrayListに䌌たListむンタヌフェむスの実装ですが、リストが倉曎されるたびに䜜成されたす

コレクション党䜓の新しいコピヌ。 これには、コレクションが倉曎されるたびに非垞に倧きなリ゜ヌスが必芁です。

ただし、このタむプのコレクションでは、コレクションが

反埩時間。



リストに基づく高床に専門化されたコレクション。

圹職 に基づいお 説明
圹割リスト

配列リスト ロヌルロヌルのリストを保存するためのコレクション。 に基づいた高床に専門化されたコレクション

いく぀かの远加メ゜ッドを持぀ArrayList

RoleUnresolvedList

配列リスト 未解決のロヌル未解決のロヌルのリストを保存するためのコレクション。 高床に専門化された

ArrayListベヌスのコレクションずいく぀かの远加メ゜ッド

AttributeList

配列リスト MBean属性を栌玍するためのコレクション。 ArrayListに基づく高床に専門化されたコレクション

いく぀かの远加の方法で



*-サむズは32ビットシステムおよび圧瞮Oopsのバむト単䜍で指定されたす。Nはリストの容量です



5 Setむンタヌフェヌスを実装するコレクション倚く

Setむンタヌフェむスを実装するコレクション倚く
圹職 によっお蚭立されたした

に

説明 サむズ*
ハッシュセット セット ハッシュテヌブルを䜿甚したSetむンタヌフェむスの実装。 ほずんどの堎合、Setむンタヌフェむスの最適な実装が可胜です。

32 * S + 4 * C

LinkedHashSet

ハッシュセット ハッシュテヌブルずリンクリストに基づくSetむンタヌフェむスの実装。 HashSetずほが同じ速床で動䜜するアドオンセット。 䞀般に、HashSetずほが同じです。セットに察する反埩の順序のみが、芁玠を远加する順序によっお決定されたす

初めお蚭定したす。

40 * S + 4 * C
ツリヌセット ナビゲヌション可胜セット

赀黒朚を䜿甚したNavigableSetむンタヌフェむスの実装。 コンパレヌタたたは自然順序を䜿甚しお゜ヌトされたす。぀たり、゜ヌト芏則に応じお耇数のトラバヌサル/反埩が発生したす。 HashMapに基づくHashSetのようなTreeMapに基づく

40 * S
Enumset セット ビットベクトルに基づくSetベクトルむンタヌフェむスの高性胜実装。 EnumSetオブゞェクトのすべおの芁玠は、1぀の単䞀の列挙型に属しおいる必芁がありたす

S / 8


*-サむズは、32ビットシステムおよび圧瞮Oopsのバむト単䜍で指定されたす。Cはリストの容量、Sはリストのサむズです



セットに基づく特殊コレクション

圹職 によっお蚭立されたした

に

説明
JobStateReasons

ハッシュセット 印刷ゞョブに関する情報印刷ゞョブの属性セットを保存するためのコレクション。

いく぀かの远加メ゜ッドを備えたHashSetに基づく高床に専門化されたコレクション



java.util.concurrentパッケヌゞのコレクション

圹職 によっお蚭立されたした

に

説明
CopyOnWriteArraySet

セット 同様に、CopyOnWriteArrayListは倉曎ごずにセット党䜓のコピヌを䜜成するため、

非垞にたれなコレクションの倉曎およびスレッドセヌフ芁件に掚奚

ConcurrentSkipListSet

セット TreeSetのマルチスレッドアナログです。




6 Mapむンタヌフェむスを実装するコレクション連想配列

Mapむンタヌフェヌスを実装するコレクション
Mapを実装する汎甚汎甚コレクション

圹職 によっお蚭立されたした

に

説明 サむズ*
ハッシュマップ 地図 ハッシュテヌブルを䜿甚したMapむンタヌフェむスの実装非同期Hashtableずしお機胜し、

キヌずnull倀のサポヌト。 ほずんどの堎合、最高のパフォヌマンスず

Mapむンタヌフェむスのメモリ実装。 HashMapデバむスの詳现が興味深い堎合は、この蚘事を参照するこずをお勧めしたす。

32 * S + 4 * C
LinkedHashMap

ハッシュマップ ハッシュテヌブルずリンクリスト、぀たりマップ内のキヌに基づいたMapむンタヌフェむスの実装

远加された順に保存およびバむパスされたす。 このコレクションはほが同じくらい高速です

ハッシュマップ たた、キャッシュの䜜成にも圹立ちたす

removeEldestEntryMap.Entry。 LinkedHashMapデバむスの詳现に興味がある堎合は、この蚘事を参照するこずをお勧めしたす。

40 * S + 4 * C
ツリヌマップ ナビ可胜マップ

赀黒ツリヌを䜿甚したNavigableMapの実装、぀たりコレクション、キヌをトラバヌスするずき

同じNavigableMapを䜿甚するず、キヌに最も近い倀を怜玢できたす。

40 * S
匱点マップ

地図 HashMapず同様ですが、すべおのキヌは匱いです

匱い参照、぀たりガベヌゞコレクションにより、オブゞェクトのキヌずオブゞェクトが削陀される

これらのオブゞェクトぞの他の参照が存圚しない堎合の倀。 WeakHashMapは最も簡単なものの1぀です

匱いリンクを最倧限に掻甚する方法。

32 * S + 4 * C
Enummap 地図 単玔な配列に基づいたMapむンタヌフェヌスの高性胜実装。 すべおのキヌ

このコレクションは、1぀の列挙型にのみ属するこずができたす。

4 * C
IdentityHashMap

地図 HashMapのようなIDベヌスのマップはハッシュテヌブルに基づいおいたすが、HashMapずは異なり、

等しいオブゞェクトを比范するこずはありたせん。実際に同じかどうかのみを比范したす

メモリ内のオブゞェクト。 第䞀に、コレクションの䜜業を倧幅に高速化し、第二に、

等しいが別のオブゞェクトによっお意図的に生成される堎合の「スプヌフィング攻撃」に察する保護。

第䞉に、このコレクションには、グラフをトラバヌスするずきに倚くの甚途がありたすディヌプコピヌなど

1぀のオブゞェクトを耇数回凊理するこずを避ける必芁がある堎合。

8 * C


*-サむズは、32ビットシステムおよび圧瞮Oopsのバむト単䜍で指定されたす。Cはリストの容量、Sはリストのサむズです



java.util.concurrentパッケヌゞのコレクション

圹職 によっお蚭立されたした

に

説明
䞊行ハッシュマップ

コンカレントマップ

HashMapのマルチスレッドアナログ。 すべおのデヌタは個別のセグメントに分割され、ブロックされるのみ

倉曎時の個々のセグメント。マルチスレッドでの䜜業を倧幅に高速化したす

モヌド。 むテレヌタは、このタむプのコレクションに察しおConcurrentModificationExceptionをスロヌするこずはありたせん。

ConcurrentSkipListMap

䞊行ナビゲヌション可胜マップ

TreeMapのマルチスレッドの類䌌物です




7 キュヌ/デキュヌむンタヌフェむス キュヌに基づくコレクション

キュヌ/デキュヌベヌスのコレクション
圹職 によっお蚭立されたした

に

説明 サむズ*
配列

デケ 動的配列に基づくDequeむンタヌフェヌスの効率的な実装、類䌌

配列リスト

6 * N
LinkedList

デケ 双方向リンクリストに基づくList and Dequeむンタヌフェむスの実装、぀たり、各芁玠が前の芁玠ず次の芁玠を指す堎合、Queueむンタヌフェむスを介しお䜜業する堎合、LinkedListはFIFOキュヌずしお機胜したす。

40 * N
PriorityQueue

キュヌ ヒヌプヒヌプに基づく無制限の優先床キュヌ。 ゜ヌトされたアむテム

わかりたしたたたはコンパレヌタを䜿甚しお。 null芁玠を含めるこずはできたせん。



*-サむズは、32ビットシステムおよび圧瞮Oopsのバむト単䜍で指定されたす。Cはリストの容量、Sはリストのサむズです



java.util.concurrentで定矩されおいるマルチスレッドキュヌずデックは、個別の蚘事を必芁ずするため、それらに関する情報に興味がある堎合はここでは説明したせん。この蚘事を読むこずをお勧めしたす





8その他のコレクション

その他のコレクション
圹職 説明 サむズ*
ビットセット

その名前にもかかわらず、BitSetはSetむンタヌフェむスを実装したせん。 BitSetは、ビット配列のコンパクトな蚘録に䜿甚されたす。

N / 8





9コレクションを操䜜する方法

コレクションメ゜ッド
アルゎリズム-コレクションクラスには、倚くの䟿利な統蚈手法が含たれおいたす。

コレクションを操䜜するには

方法 説明
頻床 コレクション、オブゞェクト

指定されたコレクション内のこの芁玠の出珟回数を返したす。
disjoint コレクション、コレクション 2぀のコレクションに共通の芁玠がない堎合、trueを返したす。
addAll コレクション<スヌパヌT>、T ... 指定された配列たたはパラメヌタヌにリストされおいるのすべおの芁玠を指定されたコレクションに远加したす
min コレクション コレクションから最小アむテムを返したす
max コレクション コレクションから最倧のアむテムを返したす




リストを䜿甚するには

方法 説明
゜ヌト リスト ほずんどの堎合、パフォヌマンスが高品質のクむック゜ヌトのパフォヌマンスに近いマヌゞ゜ヌトアルゎリズムを䜿甚した゜ヌトにより、On * log nパフォヌマンスクむック゜ヌトではなくず安定性クむック゜ヌト。 安定した゜ヌトは、゜ヌト時に同じ芁玠の順序を倉曎しないものです
binarySearch リスト、オブゞェクト バむナリ怜玢アルゎリズムを䜿甚しお、リスト内のアむテムを怜玢したす。
リバヌス リスト すべおのリストアむテムを䞊べ替える
シャッフル リスト リスト内のすべおのアむテムをランダムにシャッフルしたす
fill リスト、オブゞェクト リスト内の各アむテムを倀で䞊曞きする
コピヌ リスト送信先、リスト送信元 あるリストを別のリストにコピヌする
回転 リストリスト、int距離 リスト内のすべおのアむテムを指定された距離だけ移動したす。
replaceAll リストリスト、オブゞェクトoldVal、オブゞェクトnewVal ある倀のすべおの出珟を別の倀に眮き換えたす
indexOfSubList リスト゜ヌス、リストタヌゲット ゜ヌスリストでタヌゲットリストが最初に珟れるむンデックスを返したす
lastIndexOfSubList リスト゜ヌス、リストタヌゲット ゜ヌスリスト内のタヌゲットリストの最埌の出珟のむンデックスを返したす
スワップ リスト、int、int 指定された䜍眮にある芁玠を亀換したす


Java 8では、ストリヌムApiなどのコレクションを操䜜する方法も導入されたしたが、その䜿甚䟋に぀いおはセクション5で埌述したす。



10さたざたなタむプのJDKコレクションは内郚でどのように配眮されたすか

さたざたなタむプのJDKコレクションは内郚でどのように配眮されたすか
収集 内郚デバむスの説明
配列リスト このコレクションは、配列の蚭定+リストのサむズを栌玍する倉数です。 䞭だけ

新しい芁玠を远加する堎所がないたびに再䜜成される配列。 で

コレクション内の芁玠を远加たたは削陀する堎合、メモリ党䜓でテヌル党䜓がシフトされたす

新しい堎所。 幞いなこずに、容量を増やしながら、たたは远加/削陀するずきにアレむをコピヌしたす

高速なネむティブ/システムメ゜ッドによっお生成される芁玠。 詳现が興味深い堎合

この蚘事をご芧になるこずをお勧めしたす。

LinkedList コレクション内では、前の芁玠ぞのリンクを含む内郚Nodeクラスが䜿甚され、

次の芁玠ず芁玠自䜓の倀。 コレクションむンスタンス自䜓にサむズずリンクが栌玍されたす

コレクションの最初ず最埌の芁玠。 オブゞェクトを䜜成するこずは、

パフォヌマンスずメモリを集䞭的に䜿甚するLinkedList

アナログよりもはるかに倚くのメモリ。 通垞、ArrayList、ArrayDequeryはパフォヌマンスずメモリの最適な゜リュヌションですが、たれなケヌスリストの䞭倮に頻繁に挿入され、リスト内のたれな動きが発生するが圹立぀堎合がありたすただし、この堎合はapacheからTreeListを䜿甚する方が䟿利です。 詳现が興味深い堎合は、この蚘事をご芧になるこずをお勧めしたす。

ハッシュマップ このコレクションは、ハッシュテヌブル䞊に構築されたす。぀たり、コレクション内には、コレクションの容量に等しい内郚クラスバケットノヌドの配列がありたす。 新しい芁玠を远加するず、そのハッシュ関数が蚈算され、キャパシティHashMapモゞュロで陀算されるため、配列内の芁玠の䜍眮が蚈算されたす。 この堎所に芁玠がただ保存されおいない堎合、远加された芁玠ぞのリンクを含む新しいNodeオブゞェクトが䜜成され、配列内の目的の堎所に曞き蟌たれたす。 この堎所に既に芁玠が存圚する堎合ハッシュ衝突が発生する堎合、Nodeは基本的に単玔にリンクされたリストです。぀たり、次の芁玠ぞのリンクが含たれたす。リスト内のすべおの芁玠をバむパスし、远加された芁玠ず等しいかどうかを確認できたすそのような䞀臎が芋぀からなかった堎合、新しいNodeオブゞェクトが䜜成され、リストの最埌に远加されたす。 リンクリストバケットの芁玠の数が8個を超える芁玠になるず、代わりにバむナリツリヌが䜜成されたす。 ハッシュテヌブルの詳现に぀いおは、 wikiを参照しおくださいHashMapはチェヌンメ゜ッドを䜿甚しお衝突を解決したす。 HashMapデバむスの詳现が興味深い堎合は、この蚘事を参照するこずをお勧めしたす。

ハッシュセット HashSetは単なるHashMapであり、倀の代わりに停のオブゞェクトが曞き蟌たれ、キヌのみが重芁です。 HashSet内には、HashMapコレクションが垞に保存されたす。

IdentityHashMap IdentityHashMapはHashMapに類䌌しおいたすが、芁玠が等しいかどうかをチェックする必芁がないため、

2぀の芁玠の違い。 異なるオブゞェクトを指したす。 これのおかげで、

内郚クラスNodeを取り陀き、すべおのデヌタを1぀の配列に栌玍し、衝突が発生する

適切な空きセルが芋぀かるたで怜玢されたす メ゜ッド

オヌプンアドレッシング ハッシュテヌブルの詳现に぀いおは、 wikiを参照しおください

IdentityHashMapはオヌプンアドレッシングメ゜ッドを䜿甚しお衝突を解決したす

LinkedHashMap / LinkedHashSet 内郚構造はHashMapずほが同じですが、代わりに

内郚クラスNode、TreeNodeを䜿甚したす。TreeNodeは前の倀ず次の倀を知っおいたす。

これにより、キヌを远加する順序でLinkedHashMapをバむパスできたす。 基本的にLinkedHashMap =

HashMap + LinkedList。 LinkedHashMapデバむスの詳现に興味がある堎合は、この蚘事を参照するこずをお勧めしたす。

TreeMap / TreeSet これらのコレクションの内郚構造は、バランスの取れた赀黒のツリヌ䞊に構築され、

wikiで詳现を読む

匱点マップ 内郚では、通垞のリンクではなく、すべおがHashMapのように敎理されおいたす

WeakReferenceが䜿甚され、削陀に必芁な別のReferenceQueueキュヌがありたす

匱い゚ントリ

EnumSet / EnumMap EnumSetずEnumMapは、HashSetやHashMapずは異なり、ビットベクトルず配列を䜿甚しお

デヌタストレヌゞをコンパクトにし、パフォヌマンスを向䞊させたす。 これらのコレクションの制限は

EnumSetずEnumMapは、1぀のEnumの倀のみをキヌずしお保存できたす。





11暙準コレクションラむブラリの他の有甚な゚ンティティ

暙準コレクションラむブラリの他の有甚な゚ンティティ
公匏のコレクションガむドに含たれる他の有甚な゚ンティティを芋おみたしょう。

1 ラッパヌ実装 -機胜を远加し、他の実装の動䜜を倉曎するためのラッパヌ。 統蚈的手法のみを䜿甚しおアクセスしたす。

  • Collections.unmodifiableInterface-指定されたコレクションに基づいお倉曎䞍可胜なコレクションを䜜成するためのラッパヌ。このコレクションを倉曎しようずするずUnsupportedOperationExceptionがスロヌされたす

  • Collections.synchronizedInterface-指定されたコレクションに基づいお同期コレクションを䜜成したす。ベヌスコレクションぞのアクセスがこの関数によっお返されるコレクションラッパヌを介しおいる限り、スレッドセヌフが保蚌されたす。

  • Collections.checkedInterface-型チェック付きのコレクションを動的に返したす

    実行時、぀たり、指定されたコレクションのタむプセヌフビュヌを返したす。

    間違った型の芁玠を远加しようずするず、ClassCastExceptionがスロヌされたす。 䜿甚する堎合

    汎甚JDKメカニズムは、コンパむルレベルで型のコンパむルをチェックしたすが、このメカニズム

    バむパスするこずができ、動的な型チェックではこの機䌚を利甚できたせん。





2 アダプタの実装 -この実装は、1぀のコレクションむンタヌフェむスを別のコレクションむンタヌフェむスに適合させたす

  • newSetFromMapMap-Setむンタヌフェヌスの実装からMapむンタヌフェヌスの実装を䜜成したす。
  • asLifoQueueDeque-Dequeからのビュヌを、Last In First OutLIFOの原理に基づいたキュヌずしお返したす。



3 䟿利な実装 -コレクションむンタヌフェむスの高性胜な「ミニ実装」。

  • Arrays.asList-配列をリストずしお衚瀺できたす
  • emptySet、emptyList、およびemptyMap-空のセット、リスト、たたは空の未倉曎の実装を返したす。

    地図

  • singleton、singletonList、singletonMap -1぀の指定されたオブゞェクトたたは1぀のキヌず倀の関係を含む倉曎䞍可胜なセット、リスト、たたはマップを返したす

  • nCopies-指定されたオブゞェクトのn個のコピヌを含む倉曎䞍可胜なリストを返したす


4 むンタヌフェむスの抜象的な実装 -コレクションの特定の実装の䜜成を簡玠化するための共通機胜コレクションのスケルトンの実装。

  • AbstractCollection-セットでもリストでもないコレクション「バッグ」やマルチセットなどのCollectionむンタヌフェむスの抜象実装。

  • AbstractSet -Setむンタヌフェむスの抜象的な実装。
  • AbstractList-配列などのランダムアクセスを蚱可するリストのListむンタヌフェむスの抜象的な実装。

  • AbstractSequentialList-リンクリストなどのシヌケンシャルアクセスベヌスのリスト甚のListむンタヌフェむスの抜象的な実装。

  • AbstractQueue-抜象キュヌの実装。
  • AbstractMap-抜象マップの実装。


4 むンフラ

  • むテレヌタ -通垞の列挙むンタヌフェむスに䌌おいたすが、優れた機胜を備えおいたす。
  • Iterator -Enumerationむンタヌフェむス機胜に加えお、コレクションからアむテムを削陀する機胜が含たれたす。

  • ListIteratorはリストに䜿甚されるむテレヌタヌで、双方向の反埩、芁玠の眮換、芁玠の挿入、むンデックスによる取埗など、通垞のむテレヌタヌむンタヌフェむスの機胜を远加したす。



5泚文

  • 比范可胜 -それらを実装するクラスの自然な゜ヌト順を定矩したす。 この順序は、゜ヌト方法で䜿甚するか、゜ヌトされたセットたたはマップを実装するために䜿甚できたす。

  • Comparator-順序関係を衚したす。これは、゜ヌトされたセットたたはマップ内のリストたたはメむン順序を゜ヌトするために䜿甚できたす。 型の自然な順序をオヌバヌラむドしたり、Comparableむンタヌフェむスを実装しおいない型のオブゞェクトを順序付けたりできたす。



6ランタむム䟋倖

  • UnsupportedOperationException-この゚ラヌは、コレクションが呌び出された操䜜をサポヌトしおいない堎合にスロヌされたす。

  • ConcurrentModificationException-むテレヌタたたはリストむテレヌタをスロヌしたす。むテレヌタが基づいおいるコレクションがアルゎリズムの堎合反埩䞭に予期せず倉曎された堎合、メむンリストが予期せず倉曎された堎合はリストに基づくビュヌもスロヌしたす。



7パフォヌマンス

  • RandomAccess-リストをマヌクするマヌカヌむンタヌフェむスは、䜍眮によっお芁玠にすばやく通垞は䞀定時間アクセスできるようにしたす。 これにより、シヌケンシャルアクセスず䜍眮アクセスの遞択に関するこの動䜜を考慮したアルゎリズムを生成できたす。


8配列を操䜜するためのナヌティリティ

  • 配列 -配列のハッシュを゜ヌト、怜玢、比范、サむズ倉曎、取埗するための静的メ゜ッドのセット。 たた、配列を文字列に倉換し、配列をプリミティブたたはオブゞェクトで埋めるためのメ゜ッドも含たれおいたす。






この蚘事の詳现に぀いおは、たずえば、コレクションの操䜜に関するセクションや、グアバ、Apache Commons、EclipseGS Collectionsのコレクションの䜿甚に関する質問などです。



II。 ストリヌムAPI



関数型プログラミング、ラムダ、およびJava 8で远加された機胜もむンタビュヌで非垞に䞀般的です。 このチヌトシヌトで詳现に説明したしたが、ここでは簡単な説明のみを行いたす。



ストリヌムAPI
Stream Api
Stream API . stream Java 8 , .



Stream Api SQL, :

Integer sumOddOld = 0; for(Integer i: collection) { if(i % 2 != 0) { sumOddOld += i; } }
      
      





次に、Stream Apiを䜿甚しお、機胜的なスタむルでこの問題を解決できたす。

  Integer sumOdd = collection.stream().filter(o -> o % 2 != 0).reduce((s1, s2) -> s1 + s2).orElse(0);
      
      





さらに、Stream Apiを䜿甚するず、䜙分なコヌドなしでstreamをparallelStreamに倉曎するだけで問題を䞊列で解決できたす。

  Integer sumOdd = collection.parallelStream().filter(o -> o % 2 != 0).reduce((s1, s2) -> s1 + s2).orElse(0);
      
      





セマフォ、同期、デッドロックのリスクなどなく、すでにコヌドを䞊列化したす。



I.ストリヌムを䜜成する方法



ストリヌムを䜜成する方法
ストリヌムを䜜成するいく぀かの方法を次に瀺したす。

ストリヌムを䜜成する方法 䜜成テンプレヌト 䟋
1.クラシックコレクションからストリヌムを䜜成する コレクション。 ストリヌム 
 Collection<String> collection = Arrays.asList("a1", "a2", "a3"); Stream<String> streamFromCollection = collection.stream();
      
      



2.倀のストリヌムを䜜成する Stream.of  value1 、... valueN 
 Stream<String> streamFromValues = Stream.of("a1", "a2", "a3");
      
      



3.配列からストリヌムを䜜成する Arrays.stream  配列 
 String[] array = {"a1","a2","a3"}; Stream<String> streamFromArrays = Arrays.stream(array);
      
      



4.ファむルからストリヌムを䜜成したすファむルの各行は、ストリヌムの個別の芁玠になりたす Files.lines  ファむルぞのパス 
 Stream<String> streamFromFiles = Files.lines(Paths.get("file.txt"))
      
      



5.文字列からストリヌムを䜜成する 「ストリング」。 文字 
 IntStream streamFromString = "123".chars()
      
      



6. Stream.builderを䜿甚する ストリヌム ビルダヌ 。 远加 ....... ビルド 
 Stream.builder().add("a1").add("a2").add("a3").build()
      
      



7.䞊列ストリヌムの䜜成 コレクション。 parallelStream 
 Stream<String> stream = collection.parallelStream();
      
      





8. Stream.iterateを䜿甚しお無限のストリヌムを䜜成する

Stream.iterate  start_condition、generation_expression 
 Stream<Integer> streamFromIterate = Stream.iterate(1, n -> n + 1)
      
      



9. Stream.generateを䜿甚しお無限ストリヌムを䜜成したす Stream.generate  generation_expression 
 Stream<String> streamFromGenerate = Stream.generate(() -> "a1")
      
      







II。 ストリヌミング方法



Java Stream APIは、2皮類のメ゜ッドを提䟛したす。

1.パむプラむン-別のストリヌムを返したす。぀たり、ビルダヌずしお機胜し、

2.タヌミナル-コレクション、プリミティブ、オブゞェクト、オプションなどの別のオブゞェクトを返したす。



パむプラむンずタヌミナルメ゜ッドの違い
䞀般的なルヌル ストリヌムには任意の数のパむプラむンコヌルず最埌に1぀のタヌミナルを含めるこずができたすが、すべおのパむプラむンメ゜ッドは遅延しお実行され、タヌミナルメ゜ッドが呌び出されるたで、スレッドたたはRunnableオブゞェクトを䜜成するように実際にアクションは発生したせんただし、startを呌び出さないでください。



䞀般に、このメカニズムはSQLク゚リの構築に䌌おおり、ネストされたSelectはいく぀あっおもかたいたせんが、結果は1぀だけです。 たずえば、匏collection.stream。Filters-> s.contains "1"。Skip2.findFirst、filterおよびskipはパむプラむン凊理され、findFirstはタヌミナルであり、オブゞェクトを返したす。オプションで、これでストリヌムの操䜜が終了したす。



2.1ストリヌムを操䜜するためのパむプラむン化されたメ゜ッドの簡単な説明



詳现
ストリヌム方匏 説明 䟋
フィルタヌ レコヌドをフィルタリングし、条件に䞀臎するレコヌドのみを返したす collection.stream。filter "a1" ::等しい.count
飛ばす N個の最初の芁玠をスキップできたす collection.stream。skipcollection.size-1.findFirst。orElse "1"
明確な 重耇のないストリヌムを返したすequalsメ゜ッドの堎合 collection.stream。distinct。collectCollectors.toList
地図 各ストリヌム項目を倉換したす collection.stream。maps-> s + "_1"。collectCollectors.toList
のぞく 同じストリヌムを返したすが、ストリヌムの各芁玠に関数を適甚したす collection.stream。mapString :: toUpperCase.peeke-> System.out.print "、" + e。

collectCollectors.toList
限界 遞択を特定の数の最初の芁玠に制限できたす。 collection.stream。limit2.collectCollectors.toList
゜ヌト枈み 自然な順序で、たたはComparatorを蚭定しお、倀を䞊べ替えるこずができたす collection.stream。sort。collectCollectors.toList
mapToInt 、

mapToDouble 、

mapToLong
mapに類䌌しおいたすが、数倀ストリヌム぀たり、数倀プリミティブのストリヌムを返したす collection.stream。mapToInts-> Integer.parseInts。toArray
flatMap 、

flatMapToInt 、

flatMapToDouble 、

flatMapToLong
mapに䌌おいたすが、1぀の芁玠から耇数を䜜成できたす collection.stream。flatMapp-> Arrays.asListp.split "、"。stream。toArrayString [] :: new




2.2ストリヌムを操䜜する端末方法の簡単な説明



詳现
ストリヌム方匏 説明 䟋
findFirst ストリヌムの最初の芁玠を返したすオプションを返したす collection.stream。findFirst。orElse "1"
findAny ストリヌムから適切なアむテムを返したすオプションを返したす collection.stream。findAny。orElse "1"
集める コレクションおよびその他のデヌタ構造の圢匏での結果の衚瀺 collection.stream。filters-> s.contains "1"。collectCollectors.toList
数える ストリヌム内の芁玠の数を返したす collection.stream。filter "a1" ::等しい.count
anyMatch 少なくずも1぀の芁玠に぀いお条件が満たされる堎合、trueを返したす collection.stream。anyMatch "a1" ::等しい
なし䞀臎 いずれかの芁玠に぀いお条件が満たされない堎合、trueを返したす collection.stream。noneMatch "a8" ::等しい
allMatch すべおの芁玠に぀いお条件が真の堎合、真を返したす collection.stream。allMatchs-> s.contains "1"
分 コンパレヌタヌを条件ずしお䜿甚しお、最小芁玠を返したす collection.stream。minString :: compareTo.get
最倧 コンパレヌタヌを条件ずしお䜿甚しお、最倧芁玠を返したす collection.stream。maxString :: compareTo.get
forEach 各ストリヌムオブゞェクトに関数を適甚したす;䞊列実行での順序は保蚌されたせん set.stream。forEachp-> p.append "_ 1";
forEachOrdered 各ストリヌムオブゞェクトに関数を適甚したす;芁玠の順序を保持するず、 list.stream。forEachOrderedp-> p.append "_ new";
toArray ストリヌム倀の配列を返したす collection.stream。mapString :: toUpperCase.toArrayString [] :: new;
枛らす コレクション党䜓で集蚈関数を実行し、単䞀の結果を返すこずができたす collection.stream。reduces1、s2-> s1 + s2.orElse0


メ゜ッドfindFirst、findAny、anyMatchは短絡メ゜ッドです。぀たり、ストリヌムのバむパスは、元のストリヌム党䜓をバむパスせずに、適切な芁玠をできるだけ早く芋぀けるように線成されたす。



2.3数倀ストリヌムの远加メ゜ッドの簡単な説明



詳现
ストリヌム方匏 説明 䟋
合蚈 すべおの数倀の合蚈を返したす collection.stream。mapToInts-> Integer.parseInts。sum
平均的 すべおの数倀の算術平均を返したす collection.stream。mapToInts-> Integer.parseInts。average
mapToObj 数倀ストリヌムをオブゞェクトストリヌムに倉換したす intStream.mapToObjid->新しいキヌid。toArray




2.4他のいく぀かの䟿利なストリヌムメ゜ッド



詳现
ストリヌム方匏 説明
isParallel ストリヌムが䞊列かどうかを調べる
平行 䞊列ストリヌムを返したす。ストリヌムが既に䞊列である堎合、それ自䜓を返すこずができたす
シヌケンシャル 順次ストリヌムを返したす。ストリヌムが既にシリアルである堎合、それ自䜓を返すこずができたす






䞊蚘の内容が明確でない堎合は、別の蚘事をご芧になるこずをお勧めしたす



III。 連茉



このトピックに぀いおも、むンタビュヌで頻繁に質問がありたす。



読む...
䞻なクラス



1. ObjectOutput-オブゞェクトの「手動」シリアル化のためのストリヌムむンタヌフェむス。 メむンメ゜ッドwriteObjectオブゞェクト-ストリヌムぞのオブゞェクトの曞き蟌み、曞き蟌み...-配列の曞き蟌み、フラッシュ-ストリヌムの保存。 ObjectOutputStreamの基本的な実装



2. ObjectInput-シリアル化埌にオブゞェクトを手動で埩元するためのストリヌムむンタヌフェむス。 メむンのreadObjectメ゜ッドはオブゞェクトを読み取り、skipはnバむトをスキップしおいたす。 ObjectInputStreamのメむン実装。



3. Serializable-オブゞェクトのシリアル化がオブゞェクトの状態を自動的に保存および埩元するむンタヌフェむス。



このむンタヌフェむスを実装するオブゞェクトは次のこずを行う必芁がありたす。

1.最も近い非シリアル化可胜な祖先からの匕数なしでコンストラクタヌにアクセスできたす。

serialPersistentFieldsおよびtransientを䜿甚しお、シリアル化可胜および非シリアル化可胜フィヌルドをマヌクしたす。



たた、そのようなクラスはメ゜ッドを実装できたすオプション

1. writeObject-シリアル化を制埡するか、远加情報を曞き蟌みたす。

2. readObject-逆シリアル化の制埡甚、

3. writeReplace-オブゞェクトを眮き換えたす。 すでにストリヌムに蚘録されおいたす

4. readResolve-ストリヌムから埩元するオブゞェクトの定矩。



4. Externalizable-オブゞェクトの保存ず埩元の機胜をプログラマが定矩した機胜に委任するむンタヌフェむス。 Externalizableは、Serializableむンタヌフェむスを拡匵したす。



このむンタヌフェむスを実装するオブゞェクトは次のこずを行う必芁がありたす。

1.匕数なしのパブリックコンストラクタヌがある。

2.読み取りおよび曞き蟌み甚にそれぞれwriteExternalおよびreadExternalメ゜ッドを実装したす。

3.たた、そのようなクラスはメ゜ッドを実装できたすオプション

-writeReplace-オブゞェクトを眮き換えたす。 すでにストリヌムに蚘録されおいたす

-readResolve-ストリヌムから埩元するオブゞェクトの定矩。



IV。 æ•°å­Š



このトピックに関する質問は非垞にたれですより正確には、このトピックに関する単䞀の質問を芚えおいたせんが、念のため、それらに぀いお芚えおおく䟡倀がありたす。



読む...
Java SEで数孊蚈算を実装するためのクラスはわずかです。

1. java.lang.Math - StrictMathずは異なり、倚数の静的数孊関数を含むクラス -数孊関数は、同じ匕数に察しお垞に正確に同じ倀を返すずは限りたせん実数の倀は非垞に小さい倀で異なる堎合がありたす。より良いパフォヌマンスを達成したす。



2. java.lang.StrictMath-倚数の静的数孊関数を含むクラス。 Mathずは異なり、1぀の匕数に぀いお、結果は垞にたったく同じです。 数孊にない類䌌䜓の機胜が含たれおいたす。



3. java.math.BigDecimalおよびjava.math.BigInteger-高い粟床ず寞法を必芁ずする数倀を操䜜するためのクラス。



4. java.math.MathContext -BigDecimalたたはBigIntegerクラスで䜿甚できる蚭定。



V.参照オブゞェクト



しかし、参照オブゞェクトに぀いおは疑問があり、開発者は非垞にめったに䜿甚されないため、開発者はそれらに浮かぶこずがよくありたす。 基本的に、これらは通垞の「匷力な」ポむンタよりも柔軟なメモリ管理のためのクラスです。



読む...
さたざたな参照オブゞェクトを䜜成できるクラス



1. 参照 -類䌌オブゞェクトの抜象クラス。



2. SoftReference-空きメモリがないこずをガベヌゞコレクタヌが怜出するず、゜フトリンク、オブゞェクトが削陀されたす。



3. WeakReference-匱いリンク。 次回パスするず、ガベヌゞコレクタヌは、そのようなリンクからのみアクセスできるオブゞェクトを削陀したす。 キャッシュおよび䞀時オブゞェクトに䜿甚されたす。



4. PhantomReference-ファントムリンクを䜜成したす。リンク自䜓は垞にnullを返したすが、オブゞェクトを削陀する前に、リンクはReferenceQueueキュヌに眮かれ、オブゞェクトに関連付けられたリ゜ヌスはこのキュヌをバむパスしお解攟できたす。



5. ReferenceQueue-ガベヌゞコレクタヌが参照するオブゞェクトを削陀したずきにリンクが远加されるキュヌ。



VI。 正芏衚珟



むンタビュヌでは珍しいトピックですが、芚えおおく䟡倀がありたす。



正芏衚珟を操䜜するための2぀のメむンクラスず1぀のむンタヌフェむスがありたす。



1. パタヌン -マッチャヌで䜿甚されるコンパむル枈み正芏衚珟

マッチャヌ CharSequenceでコンパむル枈みの正芏衚珟Patternクラスを実行するためのクラス。



2. MatchResult -Matcherの結果を返すのに圹立ちたす



VII。 ロギング



たた、このトピックに関する質問を芚えおいたせんが、SEで暙準のログ蚘録を繰り返すこずは䟝然ずしお有甚です。



読む...
基本的なロギングスキヌム



画像



図からわかるように、ロギングの際、ロガヌはフィルタヌを適甚し、ハンドラヌメッセヌゞたたはハンドラヌのチェヌンを送信したす。これは、フィルタヌを適甚し、フォヌマットし、メッセヌゞを倖郚に送信したすコン゜ヌルに衚瀺、ファむルに保存など



各メッセヌゞには、FINESTからSEVEREたでのレベルレベルクラスがあり、



Java SEのロギングクラスの䞻なタむプ



私、ハンドラヌ



Java SEにはいく぀かのハンドラがありたす。



1. StreamHandler -OutputStreamに曞き蟌み、



2. ConsoleHandler - System.errぞの曞き蟌みコン゜ヌル、



3. FileHandler-ファむルに曞き蟌み、



4. SocketHandler -TCPポヌトぞの曞き蟌み、



5. MemoryHandler-メモリにログを保存し、



II、フォヌマッタヌ



Java SEは、2皮類のフォヌマッタヌを提䟛したす。



1. SimpleFormatter-人間が読み取れる圢匏、



2. XMLFormatter -XML構造のフォヌマット



III。 サヌビスクラス



1. LogManager-LogManagerクラスは、すべおのシステムロガヌずそのプロパティに関する情報を保存したす。



2. LoggingPermissionクラスは、ロガヌなどを倉曎する暩限を決定するために䜿甚されたす。 SecurityManagerの堎合。



3. Loggerクラスを䜿甚しおメッセヌゞを蚘録し、LogRecordクラスを䜿甚しお、ロギングフレヌムワヌクずハンドラヌ間でメッセヌゞを転送したす。



Viii。 䞊行性



読む...
可胜な質問


  1. mainがJavaプログラムで最埌に終了するスレッドであるこずを確認するにはどうすればよいですか
  2. スレッドはどのように盞互䜜甚したすか
  3. スレッド通信メ゜ッドがObjectクラスにあるのは、wait、notify、notifyAllがなぜですか
  4. 同期メ゜ッドたたはブロックからwait、notify、notifyAllメ゜ッドを呌び出す必芁があるのはなぜですか
  5. スレッドスリヌプおよびyieldメ゜ッドが静的なのはなぜですか
  6. Javaでスレッドセヌフを提䟛する方法は
  7. Javaのvolatileキヌワヌドずは
  8. 掚奚されるSynchronizedメ゜ッドたたはSynchronizedブロックは䜕ですか
  9. ThreadLocalずは䜕ですか
  10. スレッドグルヌプずは䜕ですか それらを䜿甚すべきですか
  11. Java Thread Dumpずは䜕ですか、Java Thread Dumpプログラムを取埗する方法は
  12. Javaタむマヌクラスずは䜕ですか 特定の時間間隔埌にタスクを開始する方法は
  13. スレッドプヌルずは䜕ですか Javaでスレッドプヌルを䜜成する方法
  14. Threadクラスのrunメ゜ッドがオヌバヌラむドされない堎合はどうなりたすか




スレッド



読む...
可胜な質問
  1. プロセスずスレッドの違いは䜕ですか
  2. マルチスレッドプログラミングの利点は䜕ですか
  3. ナヌザヌスレッドずデヌモンスレッドの違いは䜕ですか
  4. Javaでスレッドを䜜成する方法は
  5. スレッドのさたざたな条件は䜕ですか
  6. Threadクラスでrunメ゜ッドを呌び出すこずは可胜ですか
  7. 特定の時間スレッドを停止するにはどうすればよいですか
  8. スレッドの優先床ずは䜕ですか
  9. スレッドスケゞュヌラずタむムスラむシングずは䜕ですか
  10. マルチスレッドのコンテキスト切り替えずは䜕ですか
  11. Javaでデヌモンスレッドを䜜成する方法は






プロセスずスレッド -違いは、プロセスは独立したアプリケヌションOSが制埡であり、スレッドはJavaでの䞊列実行甚の独立した軜量スレッドJVMずプログラマヌが制埡であるずいうこずです。



マルチスレッドプログラミングの利点 -正しく蚘述されたマルチスレッドアプリケヌションは、耇数のプロセッサの䜿甚により高速に実行され、スレッドの1぀がリ゜ヌスの受信を埅機しおいる間、プロセッサはアむドル状態になりたせん。



デヌモンスレッドはバックグラりンドで実行されるスレッドであり、JVMはシャットダりンするために終了するのを埅぀必芁はありたせん。 setDaemontrueを䜿甚しお任意のスレッドをデヌモンにするこずができたすが、このメ゜ッドは、startでスレッドを開始する前に呌び出す必芁がありたす。



ThreadGroupは、スレッドグルヌプに関する情報を提䟛する廃止されたAPIです。 珟圚、䜿甚は掚奚されおいたせん。

Java Thread Dump-すべおのJVMスレッドの状態に関する情報を取埗し、デッドロック状態たたはその他のマルチスレッドの問題を怜玢したす。 Java Thread Dumpを生成する方法は倚数ありたす。たずえば、Java 8では、jcmdコマンドPID file_name for dumpたたはkill -3 PIDを䜿甚しお、たたは任意のプロファむラヌVisualVM、jstackなどを䜿甚しお生成できたす。



Java SEでスレッドを䜜成する方法



1. Runnableむンタヌフェむスを実装するクラスを䜜成し、runメ゜ッドを実装し、startメ゜ッドでスレッドを開始したす。runメ゜ッドが正しく呌び出されないこずに泚意しおください。この堎合、新しいスレッドは䜜成されたせん動䜜したす。



2. Threadクラスから継承クラスを䜜成し、runメ゜ッドをオヌバヌラむドし、startメ゜ッドでスレッドを開始したす。 方法1ずは異なり、Threadクラスは既に定矩された倚数のメ゜ッドを提䟛したすが、むンタヌフェヌスを実装するず柔軟性が高たりたすJavaでは倚重継承ができないため。



3.゚グれキュヌタを䜿甚したす。これにより、メ゜ッド1-2の高レベルの類䌌物が提䟛されたす。



スレッドメ゜ッド



1. スリヌプ -指定した時間、たたはスレッドが䞭断されなかった瞬間たで実行を停止したす。



2. 割り蟌み -終了する必芁があるこずをスレッドに送信したすスレッドの゜フト割り蟌み。スレッドはこの信号の凊理をサポヌトする必芁がありたす定期的にThread.interruptedフラグを調べるこずにより。



3. 結合 -別のスレッドの終了たたはスレッド停止信号を埅ちたす。



4. synchronized-メ゜ッドたたは同期ブロックの前のキヌワヌドリンク{...}



5. 埅機 -スレッドを停止し、通知たたはnotifyAllの呌び出しを埅機したす。



6. 停止 廃止-スレッドをすぐに停止したす。共有倉数の状態が誀った状態になる可胜性があるため、スレッドを䜿甚しないこずを匷くお勧めしたす。



7. サスペンド 非掚奚および再開非掚奚-ストリヌムを䞀時的に停止しお埩元したす。 非垞に頻繁にデッドロックが発生するため、䜿甚するこずはお勧めしたせん。「y䞀時停止䞭にリ゜ヌスはブロックされたたたになりたす



8. setUncaughtExceptionHandler-このストリヌムに䟋倖ハンドラヌを远加する機胜。



スレッドの特別な倉数



ThreadLocal -1぀のスレッドのみのロヌカル倉数。各スレッドはその倀を参照したす。

volatileは、すべおのスレッドがメモリヒヌプから読み取り、キャッシュしない倉数をマヌクするキヌワヌドです。 これはすべおの同期の問題を解決するわけではありたせんが、通垞の倉数ストリヌムにはキャッシュする暩利があり、長時間曎新する暩利はたったくありたせん。 耇数のスレッドでより信頌性の高い䜜業を行うには、アトミック倉数たたは同期ブロックを䜿甚する必芁がありたす。







アトミック操䜜ずクラス



読む...
可胜な質問
  1. Javaのどのタむプのデヌタは、マルチスレッドの芳点から読み取り/曞き蟌み操䜜にずっおアトミックですか
  2. アトミック操䜜ずは䜕ですか
  3. Java Concurrency APIのどのアトミッククラスを知っおいたすか






アトミック操䜜 -実行される操䜜たたは完党に実行されない操䜜。



次のアトミック操䜜



1.リンクおよびプリミティブ型の読み取りず曞き蟌みlongおよびdoubleを陀く



2. volatileずマヌクされたすべおの倉数の読み取りず曞き蟌み曞き蟌みず読み取りは発生前関係ずしお、぀たり保蚌された方法で実行されるため、



最小化された同期ず゚ラヌで異なるスレッドに共通の倉数を簡単に䜜成するための原子倉数。 詳现に぀いおは、 javadocを参照しおください







掻力の問題





読む...
可胜な質問
  • デッドロックずは䜕ですか デッドロックを分析しお回避する方法は
  • デッドロック以倖にマルチスレッドの問題はありたすか
  • 飢vずラむブロックずは䜕ですか






マルチスレッドアプリケヌションのパフォヌマンスの問題ラむブネスの問題



1. デッドロック-2぀のスレッドで2぀の異なるリ゜ヌスをブロックし、リリヌスを無限に埅機したす。



2、 飢Star-スレッドの1぀が頻繁に䜿甚されるリ゜ヌスを長時間ブロックし、残りのスレッドがリリヌスを埅機する



3. ラむブロック-2぀のスレッドが盞互のアクションに応じお同じリ゜ヌスを解攟しお占有する堎合、必芁なリ゜ヌスをすべお取埗しお実行を継続するこずはできたせん。





䞍倉オブゞェクト定矩戊略



読む...
䞍倉オブゞェクトを䜜成するには、次の芏則に埓う必芁がありたす。



1.「セッタヌ」メ゜ッドを提䟛しないでください。すべおのフィヌルドは最終的なプラむベヌトでなければなりたせん。



2.継承者がメ゜ッドをオヌバヌラむドしないようにしたす。これは、クラスをfinalずしお定矩する最も簡単な方法です。 より耇雑な方法は、コンストラクタをプラむベヌトずしお定矩し、ファクトリメ゜ッドを䜿甚しおオブゞェクトを䜜成するこずです。



3.可倉オブゞェクトぞのリンクを持぀フィヌルドを含むフィヌルドでは、倉曎を蚱可しないでください。



4.可倉オブゞェクトを倉曎するメ゜ッドを提䟛しないでください。



5.必芁に応じお、可倉オブゞェクトぞのリンクを䞎えないでください。コピヌを䜜成し、オブゞェクトのコピヌを転送したす。



高レベルのマルチスレッドツヌル



読む...
可胜な質問
  1. Java Concurrency APIのLockむンタヌフェヌスずは䜕ですか 同期ず比范した堎合の利点は䜕ですか
  2. Executors Frameworkずは䜕ですか
  3. BlockingQueueずは䜕ですか ブロッキングキュヌを䜿甚しお生産者ず消費者の問題を回避する方法
  4. CallableずFutureずは䜕ですか
  5. FutureTaskクラスずは䜕ですか
  6. Concurrent Collectionクラスずは䜕ですか
  7. Executorsクラスずは䜕ですか
  8. Java 8には、同時実行APIのどのような改善点がありたすか








読む...
同期ブロックなどずは異なり , J8SE .



:



1. Task scheduling framework ( Executor) — , ..



2. ForkJoinPool — , Executors ExecutorService .. , ( work-stealing).



3. Lock — ,



4. Executors ,



5. — , (Concurrent Collection, BlockingQueue, java.util.concurrent .),



6. Atomic . javadoc



7. ThreadLocalRandom ( JDK 7) .



IX。 䟋倖ず゚ラヌ



読む...
  • unchecked throws?
  • , throws ?
  • checked unchecked ?
  • checked unchecked ?
  • Exception Error?
  • Exception?
  • Error Throwable?






Java :

1. Error — , , , OutOfMemoryError. catch, .

2. Exception — , . :

— checked — Exception, catch throws ( Exception throws )

— unchecked — Exception, throws ,



:

1. Throwable — exception

1.1 Error — , ,

1.2 Exception — exception, checked exception ( RuntimeException)

1.2.1 RuntimeException — — unchecked exception,



Exception'. Exception , , NullPointerException ( , - ), „“ IllegalArgumentException ( , ).



X.行



読む...
...
  1. String Java? String — ?
  2. String ?
  3. ?
  4. SubSequence String?
  5. java-?
  6. char ?
  7. String ?
  8. switch ?
  9. String, StringBuffer StringBuilder?
  10. String immutable final Java
  11. java?
  12. Char String ?
  13. , Java?
  14. String Pool?
  15. string ()?
  16. Java?
  17. String HashMap Java?






String , . , (immutable) (final), ( , , ), ( immutable, ), , , Map, immutable .



String — „abc“, new (new String(»abc")) , StringBuffer StringBuilder.



String Pool (, ). C intern() .



StringBuffer StringBuilder , , StringBuffer , StringBuilder — , — StringBuilder .





ご枅聎ありがずうございたした。 他のチヌトシヌトは私のプロフィヌルで芋぀けるこずができたす。



All Articles