今天在学习的时候用到了一个散列表。在不是很了解的情况下百度了一下,了解了不少,所以写下来作为以后参考。何为散列表?散列表,又称为哈希表,是线性表中一种重要的存储方式和检索方法。在散列表中,可以对节点进行快速检索。散列表算法的基本思想是:由结点的关键码值决定结点的存储地址,即以关键码值k为自变量,通过一定的函数关系h(称为散列函数),计算出对应的函数值h(k)来,将这个值解释为结点的存储地址,将结点存入该地址中,检索时,根据要检索的关键码值,用同样的散列函数计算出地址,然后,到相应的地址中去获取要找的结点数据。因此,散列表有一个重要特征:平均检索的长度不直接依赖于表中元素的个数。
---- 散列表最重要的一个指标是负载因子,即散列表中结点数目与表中能容纳的总结点数的比值,它描述了散列表的饱和程度,负载因子越接近1.0,内存的使用效率越高,元素的寻找时间越长,同样,负载因子越接近0.0,元素的寻找时间越短,但内存的浪费越大。Hashtable类缺省的负载因子为0.75. 
        Hashtable类
---- Hashtable类为我们提供了散列表完整的功能,可以让我们很方便地构造和使用散列表,查询信息。
---- 1.创建散列表对象

---- Hashtable类的构造器主要有下面几种形式:

public Hashtable(int initialCapacity, float loadFactor);
public Hashtable(int initialCapacity);
public Hashtable();
在本文的实例中,我们使用了最简单的一种:
Hashtable stockInfo = new Hashtable();

---- 2.充填数据
---- 当构造了Hashtable对象后,我们就可以将数据填入该对象中,以便以后查询。Hashtable类提供了put方法来完成数据的装填,其原型如下:

---- public synchronized Object put(Object key, Object value);

---- 3.查询数据

---- 查询数据可以使用get方法,其原型如下:

---- public synchronized Object get(Object key)

---- 4.其它常用的方法

public int size();
//返回散列表中的结点数目
public boolean isEmpty();
//判断散列表是否为空
public boolean containsValue(Object value);
//判断散列表中是否含有某值
public synchronized boolean containsKey(Object key);
//判断散列表中是否含有某个结点
public synchronized void clear();
//清空整个散列表
       StringTokenizer类
---- StringTokenizer类的主要用途是将字符串以定界符为界,分析为一个个的token(可理解为单词),定界符可以自己指定。
---- 构造器有下面几种形式:

public StringTokenizer(String str,
String delim, boolean returnTokens);
public StringTokenizer(String str, String delim);
public StringTokenizer(String str);
其中,str为需分析的字符串,delim为定界符,
Tokens描述是否将定界符作为一个token。

---- 其它常用的方法有:
public boolean hasMoreTokens() ;
//判断字符串中是否还有token
public String nextToken();//
StringTokenizer对象的下一个token
我们来看一个简单的注册页面。我们通过name.jsp页面把数据传递到login.jsp
  (Name.jsp)
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<head>
<title>Register Page</title>
</head>

<body>
<form name="form1" action="login.jsp" method="post">
<p>Please input your name that you wanna registered:
<input type="text" name="name" value="abc"><br>
<p>Sendding by this button:
<input type="submit" name="submit" value="Sendding">
</form>
</body>
</html>
然后提交到login.jsp
<%@ page contentType="text/html; charset=gb2312" %>
<%@ import page="java.util.*" %>
<html>
<head>
<title>login.jsp</title>
</head>

<body>
<%!
   Hashtable hashtable=new Hashtable();
   public synchronized void putName(String s)
   {
     hashtable.put(s,s);
   }
%>
<%
  String name=request.getParameter("name");
  if(name==null)
     {
    name="";
  }
  byte b[]=name.getBytes("ISO-8859-1");
  name=new String(b);
  if(!(hashtable.containsKey(name)))
   {
     putName(name);
  out.print("<br>"+"你已经注册成功");
  out.print("<br>"+"你注册的名字是"+name);
   }
   else
   {
    out.print("<br>"+"该名字已经存在,请您换个名字。");
   }
%>
</body>
</html>

posted on 2005-12-14 10:42 飞扬 阅读(572) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航:
 

统计

FAQ网站

JSP/Java/Servlet开发工具

JSP/Java/Servlet技术著名网站

JSP/Servlet应用程序站点

优选博客