Skip to content

Commit

Permalink
LinkedListMap come true
Browse files Browse the repository at this point in the history
  • Loading branch information
liusishan committed Feb 21, 2019
1 parent 4fac9a0 commit 63ccb56
Showing 1 changed file with 116 additions and 0 deletions.
116 changes: 116 additions & 0 deletions 07-Set-and-Map/03-Map-Basics/src/LinkedListMap.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/**
* @Auther: lss
* @Date: 2019/2/21 15:37
* @Description:
*/
public class LinkedListMap<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);
}

@Override
public String toString() {
return key.toString() + ":" + value.toString();
}
}

private Node dummyHead;
private int size;

public LinkedListMap() {
dummyHead = new Node();
size = 0;
}


@Override
public void add(K key, V value) {
// 确认当前映射有没有要添加的key
Node node = getNode(key);
if (node == null) {
dummyHead.next = new Node(key, value, dummyHead.next);
size++;
} else {
node.value = value;
}
}

@Override
public V remove(K key) {

Node prev = dummyHead;
while (prev.next != null) {
if (prev.next.key.equals(key))
break;
prev = prev.next;
}

if (prev.next != null) {
Node delNode = prev.next;
prev.next = delNode.next;
delNode.next = null;
size--;
return delNode.value;
}

return null;
}

@Override
public boolean contains(K key) {
return getNode(key) != null;
}

@Override
public V get(K key) {
Node node = getNode(key);
return node == null ? null : node.value;
}

@Override
public void set(K key, V newValue) {

Node node = getNode(key);
if (node == null)
throw new IllegalArgumentException(key + "doesn't exits!");

node.value = newValue;
}

private Node getNode(K key) {

Node cur = dummyHead.next;
while (cur != null) {
if (cur.key.equals(key))
return cur;
cur = cur.next;
}
return null;
}

@Override
public int getSize() {
return size;
}

@Override
public boolean isEmpty() {
return size == 0;
}
}

0 comments on commit 63ccb56

Please sign in to comment.