手写的Map部分功能

Map类

package com.自己实现HashMap;

import java.util.Arrays;
import java.util.Objects;

public class MyHashMap<K, V> {
    Node<K, V>[] table;
    Integer MAPLENGTH=8;
    Integer size=0;

    public MyHashMap() {
        table = new Node[MAPLENGTH];
    }

    @Override
    public String toString() {
        return "MyHashMap{" +
                "table=" + Arrays.toString(table) +
                ", MAPLENGTH=" + MAPLENGTH +
                ", size=" + size +
                '}';
    }

    public int size() {
        return size;
    }

    public Object get(K key) {
        return null;
    }

    public Object remove(K key) {
        return null;
    }

    public void put(K key, V value) {
        int hash = key.hashCode();
        int i = hash % 8;
        if (traversalRepetition(key, value, table[i])) return;
        addNode(key, value, i);
    }

    private boolean traversalRepetition(K key, V value, Node<K, V> node1) {
        for (Node node = node1; node != null; node = node.nodeNext) {
            if (key.equals(node.key)) {
                node.value = value;
                return true;
            }
        }
        return false;
    }

    private void addNode(K key, V value, int i) {
        table[i] = new Node<K, V>(key, value, table[i]);
        size++;
    }

    /**
     * 节点对象内部类
     * @param <K>
     * @param <V>
     */
    class Node<K, V> {
        private K key;
        private V value;
        private Node nodeNext;

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

        public Node(K key, V value, Node nodeNext) {
            this.key = key;
            this.value = value;
            this.nodeNext = nodeNext;
        }

        public Node() {
        }

        public K getKey() {
            return key;
        }

        public void setKey(K key) {
            this.key = key;
        }

        public V getValue() {
            return value;
        }

        public void setValue(V value) {
            this.value = value;
        }

        public Node getNodeNext() {
            return nodeNext;
        }

        public void setNodeNext(Node nodeNext) {
            this.nodeNext = nodeNext;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Node<?, ?> hashNode = (Node<?, ?>) o;
            return Objects.equals(key, hashNode.key) &&
                    Objects.equals(value, hashNode.value) &&
                    Objects.equals(nodeNext, hashNode.nodeNext);
        }

        @Override
        public int hashCode() {
            return Objects.hash(key, value, nodeNext);
        }

        @Override
        public String toString() {
            return  "HashNode{" +
                    "key=" + key +
                    ", value=" + value +
                    ", nodeNext=" + nodeNext +
                    '}';
        }
    }
}

测试类

package com.自己实现HashMap;

public class Test {
    public static void main(String[] args) {
        MyHashMap<Object, Object> objectObjectMyHashMap = new MyHashMap<>();

        objectObjectMyHashMap.put("xxx", "12345");
        objectObjectMyHashMap.put("xxx", "45657");
        objectObjectMyHashMap.put("xxx", "45677");
        objectObjectMyHashMap.put(18,"gzh");
        objectObjectMyHashMap.put(26,"dyq");

        System.out.println(objectObjectMyHashMap);
        System.out.println();
    }
}

测试结果

posted @ 2021-07-16 18:01  GzhAnkh  阅读(52)  评论(0)    收藏  举报