import java.util.ArrayList;
public class Search<Key, Value> {
private Node first;
//链表的节点
private class Node {
Key k;
Value v;
Node next;
public Node(Key k, Value v, Node next) {
this.k = k;
this.v = v;
this.next = next;
}
}
//在链表中顺序查找
public Value get(Key k){
for(Node n = first; n != null; n = n.next) {
if (k.equals(n.k)) {
return n.v;
}
}
return null;
}
//在链表中写入数据
public void put(Key k, Value v) {
for(Node n = first; n != null; n = n.next) {
if (n.k.equals(k)) {
n.v = v;
return;
}
}
//没有找到
first = new Node(k, v, first);
}
//在链表中删除数据
public void delete(Key k) {
Node n;
Node last = first;
for (n = first; n != null; n = n.next) {
if (k.equals(n.k)) {
//删除链表节点
if (n.k.equals(first.k)) {
first = n.next;
return;
}
if (last.k == first.k) {
first.next = n.next;
} else {
last.next = n.next;
}
return;
}
last = n;
}
}
public ArrayList<String> list_keys() {
ArrayList<String> result = new ArrayList<String>();
for(Node n = first; n != null; n = n.next) {
result.add(n.k.toString());
}
return result;
}
public static void main(String []args) {
System.out.println("Beging to search");
Search<String, Integer> s = new Search<String, Integer>();
s.put("A", 1);
s.put("B", 2);
s.put("C", 3);
int v = s.get("A");
System.out.println(v);
s.delete("B");
System.out.println("List keys:");
ArrayList<String> keys = s.list_keys();
for(String key : keys) {
System.out.println(key);
}
}
}
符号表的实现上面,使用了一个私有的内部Node类来保存键和值。get()方法的实现会顺序的搜索链表,查找所给定的key是否在链表中存在。put方法会往链表中插入一个键值对。