电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> JSP教程
Java中利用散列表实现股票行情的查询(转)-JSP教程,Application/Applet
作者:网友供稿 点击:8
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
java中利用散列表实现股票行情的查询
建设银行云南省保山地区分行
杨绍方
---- 在java中,提供了一个散列表类hashtable,利用该类,我们可以按照特定的方式来存储数据,从而达到快速检索的目的。本文以查询股票的收盘数据为例,详细地说明java中散列表的使用方法。

一、散列表的原理
---- 散列表,又称为哈希表,是线性表中一种重要的存储方式和检索方法。在散列表中,可以对节点进行快速检索。散列表算法的基本思想是:由结点的关键码值决定结点的存储地址,即以关键码值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

四、实例
---- 本文使用的股票行情为上海和深圳证券交易所的收盘行情,文件名为hqsj.txt,下面是文件中的一行数据:
---- 600122宏图高科 18.90 18.80 18.90 18.20 18.27 3155 582.96

---- 下面是完整的源程序,在jdk1.2下使用javac编译通过。

import java.io.*;
import java.util.*;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class stockquote extends applet
implements actionlistener
{
private static final file info_file =
new file("hqsj.txt");
private hashtable stockinfo;
textfield stockid;
button button1;
private string quoteid,quotename;

public void init()
{
add(new label("股票代码"));
stockid = new textfield(6);
add(stockid);
button1 = new button("查询");
button1.addactionlistener(this);
add(button1);
resize(500, 300);
}

public void start()
{
loadinfo();
}

protected boolean loadinfo()
{
string fileline;
stringtokenizer tokenize;
string id;
stringbuffer name;

try {
// 创建一个访问数据文件的stream
bufferedreader stockinput = new
bufferedreader(new filereader(info_file));
// 创建hashtable对象
stockinfo = new hashtable();
// 每次从文件中读一行数据
while ((fileline = stockinput.readline()) != null) {
// 将每一行数据分解为tokens.
tokenize = new stringtokenizer(fileline);
try {
id = tokenize.nexttoken();
// 创建一个放置股票信息的buffer
name = new stringbuffer();
while(tokenize.hasmoretokens()) {
name.append(tokenize.nexttoken());
if (tokenize.hasmoretokens()) {
name.append("");
}
}
// 向hashtable中充填记录
stockinfo.put(id,name.tostring());
} catch(nullpointerexception excpt) {
system.err.println("充填数据时出错: " + excpt);
} catch(nosuchelementexception excpt) {
system.err.println("无效的数据记录 " +
"in file: " + excpt);
}
}
stockinput.close();

} catch(filenotfoundexception excpt) {
system.err.println("不能发现文件: " + excpt);
return false;
} catch(ioexception excpt) {
system.err.println("i/o故障: " + excpt);
return false;
}
return true;
}

protected string getquote(string stockid)
{
string info;

// 从hashtable得到数据
info = (string)stockinfo.get(stockid);
if (info != null)
return info;
else
return "股票代码错误!";
}

public void paint(graphics g)
{
g.drawstring("股票代码"+quoteid+":" ,10,60);
g.drawstring("股票名称"+"前收"+"今开"+"最高"
+"最低"+"收盘"+"交易量"+"交易金额", 10, 90);
g.drawstring(quotename, 10, 120);
}

public void actionperformed(actionevent ev)
{
string label = ev.getactioncommand();
if (label.equals("查询"))
{
quoteid = stockid.gettext();
if(quoteid != null)
quotename = getquote(quoteid);
else quotename = "请输入股票代码!";
repaint();
}
}
}

---- 由于java固有的、安全方面的限制,如果不使用securitypermission或数字签名等措施,java程序就不具有读取本地文件的权限,为了节省篇幅,本文对此不再多做讨论,将编译得到的stockquote.class放到一个.html文件中,直接使用jdk1.2提供的appletviewer,其命令行的使用方法如下:
d:\jdk1.2\bin\appletviewer  stockquote.html


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·IReport与JasperReport开发详解一-JSP教程,Java技巧及代码
·JSTL(JSP标准标签库)介绍-JSP教程,资料/其它
·格式化输入日期时间控件 JieFormattedDateBox-JSP教程,Java技巧及代码
·JSTL简化JSP编码-JSP教程,Jsp/Servlet
·JUnit和单元测试入门简介-JSP教程,Java技巧及代码
·从数据库中读取一个图片并保存为一个图片文件-JSP教程,数据库相关
·Java Swing入门基础-JSP教程,Java技巧及代码
·IntelliJ IDEA培训-JSP教程,Java技巧及代码
·通过JSP的预编译消除性能瓶颈-JSP教程,Jsp/Servlet
·Java中利用JMF编写摄像头拍照程序-JSP教程,Java技巧及代码

最新文章
·J2ME中的时间处理方法
·J2ME播放声音流程简介
·J2ME开发之手机键盘使用注意问题
·J2ME 记录管理存储
·MVC模式在j2me项目中的应用(二)
·MVC模式在j2me项目中的应用(一)
·J2ME中使用记录存储系统(RMS)存储信息
·J2ME与MIDP开发(1)
·用简单的J2ME程序测试MIDlet的生命周期
·JAVA基础:提升JSP应用程序的七大绝招




版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号