1、基本思想
采用链表数据结构,每个节点存储一个键值对
get():顺序遍历链表,用equals()方法比较键,如果匹配成功就返回相应的值,否则返回null
put():顺序遍历链表,用equals()方法比较键,如果匹配成功就用第二个参数更新该键相关联的值,否则就创建一个新的节点并将该键值对插入到链表的开头。
2、算法实现
/** 算法3.1 顺序查找(基于无序链表)
* 符号表的实现使用了一个私有内部Node类来在链表中保存键和值。
*/
public class SequentialSearchST<Key,Value>
{
private Node first; //链表首节点
//private int N; //结点数量
private class Node //私有类来保存键和值
{
Key key;
Value val;
Node next;
public Node(Key key, Value val, Node next)
{ this.key=key; this.val=val; this.next=next; }
}
// get()的实现会顺序地搜索链表查找给定的键(找到则返回相关联的值)
public Value get(Key key)
{
for(Node x=first; x!=null; x=x.next)
if(key.equals(x.key))
return x.val; /*命中*/
return null; /*未命中*/
}
//put()的实现也会顺序地搜索链表查找给定的键,如果找到则更新相关联的值,否则它会用给定的键值对创建一个新的结点并将其插到链表的开头。
public void put(Key key, Value val)
{
for(Node x=first; x!=null; x=x.next)
if(key.equals(x.key))
{
x.val=val;
return