Java インタビュー - データ構造

王林
リリース: 2020-11-25 15:57:11
転載
2022 人が閲覧しました

Java インタビュー - データ構造

一般的なデータ構造には、Java インタビュー - データ構造、Hashtable、ConcurrentJava インタビュー - データ構造 が含まれます。

(関連ビデオ共有: Java 教育ビデオ )

個別に紹介しましょう:

Java インタビュー - データ構造

  • 基礎的な実装: Java インタビュー - データ構造 の基礎となる全体構造は配列であり、配列内の各要素はリンクされたリストです。オブジェクト (put) が追加されるたびに、リンク リスト オブジェクト (オブジェクト タイプ) が生成されます。マップ内の各エントリは配列内の要素です (Map.Entry は <key>##) #) は、現在の要素から次の要素への参照を持ち、リンクされたリストを形成します。 </key>
  • 記憶原理: HsahMap に要素を追加するときは、まず Key オブジェクトのハッシュ値を計算し、配列の添字を取得します。配列内の位置が空の場合は挿入し、そうでない場合は、この位置でリンク リストを走査します。位置。ノードの Key オブジェクトと Node オブジェクトが両方とも新しい要素と等しい場合は、ノードの Value オブジェクトを新しい要素の Value オブジェクトで置き換えます。それ以外の場合は、新しいノードを挿入します。 (
  • Note: 赤黒ツリーは JDK 8 以降に追加されました)
Java インタビュー - データ構造 の長さは、すべてのビットを構成するために 2 の n 乗になります。この場合、ハッシュ値と (table.length - 1) が & 演算を実行してインデックスを計算すると、結果はテーブルの最後の数桁の値と等価になります。このとき、入力されたハッシュコード自体が均等に分散されていれば、ハッシュ アルゴリズムの結果は均一になります。したがって、ハッシュ衝突の可能性を減らすために、Java インタビュー - データ構造 のデフォルトの長さは 16 であり、これも適切なサイズです。

Java インタビュー - データ構造

ハッシュテーブル

比較ポイントハッシュマップハッシュテーブル実装原理前項参照Java インタビュー - データ構造の実装原理とほぼ同じですキーと値##キーと値を null にすることを許可しない2x 拡張oldThr スレッド非安全
##キーと値を null にすることを許可する #拡張戦略
2x1 拡張(oldCapacity 安全性
スレッド安全

ハッシュテーブル スレッド セーフティ戦略は実装に非常にコストがかかります。get/put の関連操作はすべて同期されており、競争の激しい同時実行シナリオではパフォーマンスが非常に低くなります。

ConcurrentJava インタビュー - データ構造

ConcurrentJava インタビュー - データ構造 は、Java 並行パッケージで提供されるスレッドセーフで効率的な Java インタビュー - データ構造 実装であり、非常に洗練された Segmentation Lock 戦略、バックボーンを採用しています。 ConcurrentJava インタビュー - データ構造 のセグメント配列です。セグメントは ReentrantLock を継承し、リエントラント ロックです。各セグメントはサブハッシュテーブルであり、セグメント内に HashEntry 配列が保持されるため、同時実行環境では異なるセグメントのデータを操作する際にロックの競合を考慮する必要がありません。

ConcurrentJava インタビュー - データ構造

LinkedJava インタビュー - データ構造、TreeMap、TreeSet

  • LinkedJava インタビュー - データ構造: シーケンシャル アクセス ハッシュマップ (配列および二重リンク リストに基づいて実装)。
  • ツリーマップ: 内部ソート (赤黒ツリー実装に基づく)。
  • TreeSet: 順序付きセット コレクション (バイナリ ツリー実装に基づく)。

ArrayList、LinkedList、Vector

  • ArrayList: 動的配列 (配列実装に基づく)。
  • LinkedList: 順序付き配列 (二重リンク リストに基づいて実装)。
  • Vector: さまざまなタイプのオブジェクトを配置できるオブジェクト コンテナー (配列に基づいて実装)。

コレクションとコレクション

  • コレクション: コレクション クラスの上位インターフェイスであり、サブインターフェイスには主に List、Set、Queue などが含まれます。
  • コレクション: コレクションに対する検索、並べ替え、置換、およびスレッド セーフ操作のためのツール クラスを提供します。

(さらに関連する面接の質問に関する推奨事項: Java 面接の質問と回答 )

バイナリ ツリー

一般的なバイナリ ツリーの概念

  • B ツリー: データベース セクションを参照https://blog.csdn.net/u012102104/article/details/79773362

  • バランス バイナリ ツリー (AVL ツリー): 各ノードの左右のサブツリー間の深さの差の絶対値は 1 を超えません。

  • ハフマン ツリー: 重み付けされたパス長が最小のバイナリ ツリーは、最適バイナリ ツリーと呼ばれます。ハフマン ツリーの構造は一意ではありませんが、すべてのリーフ ノードの加重パス長の合計が最小になります。

  • 赤黒ツリー: 自己平衡二分探索ツリー、そのプロパティは次のとおりです:

    1. ノードは赤または黒です。
    2. ルート ノードは黒です。
    3. 各リーフ ノードは黒い空のノード (NIL ノード) です。
    4. 各赤いノードの 2 つの子ノードは黒です。
    5. 任意のノードからその各リーフまでのすべてのパスには、同じ数の黒いノードが含まれます。

    各リーフからルートまでのすべてのパス上に 2 つの連続する赤いノードがあってはなりません

バイナリ ツリー トラバーサル

// 1. 先序遍历算法 DLRvoid Preorder ( BinTree bt ) {
	if ( bt ) {
		visit ( bt->data );
		Preorder ( bt->lchild );
		Preorder ( bt->rchild );
	}}// 2. 中序遍历算法 LDRvoid Inorder ( BinTree bt ) {
	if ( bt ) {
		Inorder ( bt->lchild );
		visit ( bt->data );
		Inorder ( bt->rchild );
	}}// 3. 后序遍历 LRDvoid Postorder ( BinTree bt ) {
	if ( bt ) {
		Postorder ( bt->lchild );
		Postorder ( bt->rchild );
		visit ( bt->data );
	}}// 4. 按层次遍历。/* 思路:利用一个队列,首先将根(头指针)入队列,以后若队列不空则取队头元素 p,
如果 p 不空,则访问之,然后将其左右子树入队列,如此循环直到队列为空。*/void LevelOrder ( BinTree bt ) {
	// 队列初始化为空
	InitQueue ( Q );
	// 根入队列
	EnQueue ( Q, bt );
	// 队列不空则继续遍历
	while ( ! QueueEmpty(Q) ) {
		DeQueue ( Q, p );
		if ( p!=NULL ) {
			visit ( p->data );
			// 左、右子树入队列
			EnQueue ( Q, p->lchild );
			EnQueue ( Q, p->rchild );
		}
	}}// 非递归遍历二叉树一般借助栈实现
ログイン後にコピー

関連する推奨事項: Java 入門チュートリアル

以上がJava インタビュー - データ構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!