package symbol;
public class SymbolTable<Key, Value> {
private int N;
private Node head;
//节点类
private class Node {
private Key k;
private Value v;
private Node next;
public Node(Key k, Value v, Node next) {
this.k = k;
this.v = v;
this.next = next;
}
}
public SymbolTable() {
this.head = new Node(null, null, null);
N = 0;
}
public int size() {
return N;
}
public void put(Key k, Value v) {
//判断是否有这个键值对
Node n = head;
while (n.next != null) {
//拿到当前节点
n = n.next;
//如果有这个键
if (n.k.equals(k)) {
n.v = v;
return;
}
}
Node newNode = new Node(k, v, null);
Node oldNode = head.next;
newNode.next = oldNode;
head.next = newNode;
N++;
}
public void delete(Key k) {
Node n=head;
while (n.next!=null){
if(n.next.k.equals(k)){
n.next=n.next.next;
N--;
return;
}
n=n.next;
}
}
public Value get(Key k) {
Node n=head;
while (n.next!=null){
n=n.next;
if(n.k.equals(k)){
return n.v;
}
}
return null;
}
}
只有while循环里略有不同,我用的是这个。
package symbol;
public class SymbolTable<Key, Value> {
private int N;
private final Node head;
//节点类
private class Node {
private final Key k;
private Value v;
private Node next;
public Node(Key k, Value v, Node next) {
this.k = k;
this.v = v;
this.next = next;
}
}
public SymbolTable() {
this.head = new Node(null, null, null);
N = 0;
}
public int size() {
return N;
}
public void put(Key k, Value v) {
//判断是否有这个键值对
Node n = head;
while (n.next != null) {
//如果有这个键
if (n.next.k.equals(k)) {
n.next.v = v;
return;
}
n = n.next;
}
Node newNode = new Node(k, v, null);
Node oldNode = head.next;
newNode.next = oldNode;
head.next = newNode;
N++;
}
public void delete(Key k) {
Node n = head;
while (n.next != null) {
if (n.next.k.equals(k)) {
n.next = n.next.next;
N--;
return;
}
n = n.next;
}
}
public Value get(Key k) {
Node n = head;
while (n.next != null) {
if (n.next.k.equals(k)) {
return n.next.v;
}
n = n.next;
}
return null;
}
}
package symbol;
public class TestSymbolTable {
public static void main(String[] args) {
SymbolTable<Integer, String> symbolTable = new SymbolTable<>();
symbolTable.put(1,"yangzhenxu");
symbolTable.put(2,"zhangxue");
symbolTable.put(3,"zhangxudong");
System.out.println("插入完毕后,元素的个数为:"+symbolTable.size());//3
symbolTable.put(1, "11111");
System.out.println("替换完毕后的元素的个数为:"+symbolTable.size());//3
//测试get方法
System.out.println("替换完毕后,键1对应的值为:"+symbolTable.get(1));//11111
//测试删除方法
symbolTable.delete(2);
System.out.println("删除完毕后,元素的个数:"+symbolTable.size());//2
}
}