第III章ハッシュコードの実装

3.1ハッシュコード和のequals

ハッシュテーブルJavaコードがある(非常に重要)

ハッシュコード

定義:JDKがアドレスや番号や文字列オブジェクトのint型の値に応じて算出

比較とequals

dfdsf

3.2リンク法コード(非常に重要な部分のハッシュ)

コンパクトな設計上の問題です

HashMapの根本的なリストには、ファスナー法上にあるアレイと実装です。インデックスは、上記されたときに挿入し、配列のインデックスに対応するキーのハッシュ値に基づいて計算されるが、インデックス=ハッシュコード%のtable.length、(添字は、上記バケットである)として計算した第一、それは要素のリストを形成するときに存在しない要素が標準より上に存在しない場合、要素が直接位置に、後端にその要素を挿入します。
クエリは、同じことが第一のハッシュキーに基づいて、対応する指数を計算し、上記のこのインデックスの多くの要素がある場合は、その後、対応する位置を見つけるためにする場合は、あなたがこのリストに対応を見つけるまで、見つける必要があります要素。

3-3のためのオープン・アドレス指定コード(午前19時01分)

3-4ハッシュテーブルソースコード解析(午後06時06分)

3-5 HashMapのソースコード分析(43:44)

3-6 HashSetのソースコード解析(8時26分)

3-7のLinkedHashMapプロフィール

BaiduのCTO王海豊:Baiduのマップは、AI時代の描写現実世界の重要なインフラとなっている
双方向のポインタ

LinkedHashMapが面接を表示された場合、などのトピック:LRU leetcode 146このトピックでは、多くの場合、設計デザインのタイトルに表示されます。

LinkedHashMap
1、继承ハッシュマップハッシュマップ+ LinkedListの
2、エントリー 前後、;
3、シーケンシャル/挿入を出力に通過した
ハッシュテーブルとリンクリスト、二重リンクリスト、および反復配列に依存性を保証を達成するのLinkedHashMap配列に挿入されます。

3-8 Leetcode戦闘演習(行われます)

質問することは非常に重要で、背中がダウンバックする必要があります
カテゴリのサブクラスの設計上の問題は
基本的にすべてのO(1)に関連したHashMap

プットを書いて、時間を取得すると、常に空になり、プットを書き始めました

置く
前にそこに
いないまで
フル
フルではない
最初の
非最初の

設計上の問題は、難しいことではありません質問のメディアの種類に一般的に困難です

public class LRUCache {
    class Node {
        int key;
        int value;
        Node next;
        Node pre;

        public Node(int key, int value) {
            this.key = key;
            this.value = value;
        }
    }

    private HashMap<Integer, Node> map;
    private int capacity;
    private Node head;
    private Node tail;

    public LRUCache(int capacity) {
        map = new HashMap<>();
        this.capacity = capacity;
        head = null;
        tail = null;
    }

    public int get(int key) {
        Node node = map.get(key);
        if (node == null) {
            return -1;
        }
        if (node != tail) {
            if (node == head) {
                head = head.next;
            } else {
                node.pre.next = node.next;
                node.next.pre = node.pre;
            }
            tail.next = node;
            node.pre = tail;
            node.next = null;
            tail = node;
        }
        return node.value;
    }
    code modify
    public void put(int key, int value) {
        Node node = map.get(key);
        if (node != null) {
            node.value = value;
            if (node != tail) {
                if (node == head) {
                    head = head.next;
                } else {
                    node.pre.next = node.next;
                    node.next.pre = node.pre;
                }
                tail.next = node;
                node.pre = tail;
                node.next = null;
                tail = node;
            }

        } else {
            Node newNode = new Node(key, value);
            if (capacity == 0) {
                Node temp = head;
                head = head.next;
                temp.next = null;
                map.remove(temp.key);
                capacity++;
            }
            if (head == null && tail == null) {
                head = newNode;
            } else {
                tail.next = newNode;
                newNode.pre = tail;
                newNode.next = null;
            }
            tail = newNode;
            map.put(key, newNode);
            capacity--;
        }
    }
}

3-9ブルームフィルタブルームフィルタ

コレクション内の要素かどうかを確認します。HashSetの
データの場合、特に大量の?
A:ビット計算方法

新しいアルゴリズム- 「ブルームフィルタ(ブルームフィルタ)
ので、k個のハッシュfucntionと対応する位置を介して各文字が1に設定されている
各位置1は、1ならば、場合は、このコレクション内に存在すると考えられているか否かを判断しますそれは定かではない、1がないことをこのコレクションの
欠点:特定のエラー

3-10ブルームフィルタブルームフィルタは、コードを実装しました

削除をサポートしていません。

ソリューション:カウントシング使用

3-11が質問ノートを行います

HashMapの/ HashSetの:
GET()&PUT)()的时间复杂度:O(1)
のcontainsKey(値)的时间复杂度:O(1)
のcontainsValueはO(n)は
、キーなしで、それはどこかを知らないので、それは、アルゴリズムはマップに保存されているすべての値の上に行かなければなりません。

おすすめ

転載: www.cnblogs.com/andrewcao95/p/di-san-zhang-san-lie-biao-dai-ma-shi-xian.html