直接贴代码了哈
有啥没有看明白的可以评论一下哦
public class LinkdeListMap <K,V> implements map<K,V> {
private class Node {
public K key;
public V value;
public Node next;
public Node(K key, V value, Node next) {
this.key = key;
this.value = value;
this.next = next;
}
public Node(K key) {
this(key, null, null);
}
public Node() {
this(null, null, null);
}
}
private Node dhead;
private int size;
public int getsize() {
return size;
}
public boolean isempty() {
return size == 0;
}
//用了这个方法得到node 这样在以后的方法调用这个就很舒服
private Node getnode(K key) {
Node cur = dhead.next;
while (cur != null) {
if (cur.key == key) { //其他的应该用equls,我用的int 只用==应该就可以了哈
return cur;
}
cur = cur.next;
}
return null;
}
public boolean contains(K key) {
Node node = getnode(key);
if (node == null) {
return false;
} else return true;
}
public void add(K key, V value) {
Node node = getnode(key);
if (node == null) {
size++;
dhead.next = new Node(key, value, dhead.next);//相当与在头节点插入节点,这个学链表的时候没有自己去认真的理解链表
} else {
node.value = value;
}
}
public V get(K key) {
Node node = getnode(key);
return node.value;
}
public void set(K key, V newvalue) {
Node node = getnode(key);
if (node == null) return;//此时应该用throw来报错的,但是我还没有学到
node.value = newvalue;
}
public V remove(K key) {
Node node = getnode(key);
if (node == null) return null;//此时应该用throw来报错的,但是我还没有学到
Node pre = dhead;
while (pre.next != null) {
if (pre.next.key == key) {
break;
}
pre = pre.next;
}
if (pre.next != null) {
Node delnode = pre.next;
pre.next = delnode.next;
delnode.next = null;
size--;
return delnode.value;
}
return null;
}
}