Java中利用散列表实现股票行情的查询

Java 专栏收录该内容
40 篇文章 0 订阅

---- 在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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
内容目录: - Draw a pie chart JSP tags provide proper code re-use Page changes 如何成为一个优秀jsp程序员 国内不谈java 《学不会JAVA,消不了忧愁》之五 Servlet基础结构 一个简单Servlet 分布式应用开发技术概述 CORBA技术及实例 About UBB with java has a bug Acme包以Post方式发送数据例子 allaire 发布jrun 3.0 rc1版 Apache Tomcat 重要信息暴露漏洞 Apache Servlet jsp APACHE TOMCAT ORACLE安装指南 applet 代码 ASP 和JSP之间抉择 bea weblgic介绍一个jsp调用 Beginner Using Servlets to display1 Beginner Using Servlets to display2 Beginner Using Servlets to display3 CSharp、Java之比较 classpath详解 CLASS文件存放位置 CONNECTING DATABASE USING JAVASERVERPAGES Cookie 规范 CORBA例子 Declarations and Access Control1 Declarations and Access Control2 easy! 不好意思, 错按了回车 EJB概述(上) EJB概述(下) EJB内部资参1 EJB内部资参2 EJB内部资参3 EJB内部资参5 ejb一则 Finalists announced for JavaWorld Editors' Choice Awards Flow control and exception Handling ftp站点荟萃 Garbage Collection Good Java Style Part 1 Good Java Style Part 2 HTML、Swing还是XML,Java客户端工具选择?(一) HTML、Swing还是XML,Java客户端工具选择?(二) HTML、Swing还是XML,Java客户端工具选择?(三) HTML、Swing还是XML,Java客户端工具选择?(四) IBM WebSphere JSP源代码暴露漏洞 import和usebean是干嘛 int 和 String 互相转换多种方法 j2ee doc 翻译系列之二 j2ee doc 翻译系列之二 j2eejdbc配置指南(二 ) 连接sql server 数据库 J2EE技术 j2ee技术简单介绍 J2EE配置指南(1) J2EE配置指南(2) Java2安全新特性下Applet数字签名具体实现方法 java applet 签名和认证 java applet 源程序学习1 java bean 与 ejb区别 Java Socket编程(一) Java Socket编程(二) Java Socket编程(三) Java Socket编程(四) Java Socket编程(五) Java Web Start 1.0 Architecture Java Web Start 1.0 Developer's Guide (1) Java Web Start 1.0 developer's guide (2) java web start 1.0 developer's guide (3) java web start 1.0 developer's guide (4) Java Web Start 1.0 FAQ Java 编程技术汉字问题分析及解决 Java 编程技术汉字问题分析及解决 Java 程序编码规范 java 技术分析 Java 线 程 讨 论 与 应 用 Java 在ClientServer 网络应用 Java 对文件读写操作之比较 JavaBean 与 Enterprise JavaBean:有什么不同? JavaBean持久化 JavaBean事件 JavaBean属性 JavaBean调用示例 JavaBean用户化 Javajsp 好入门文章共赏 javamail使用发信身份验证 JavaScript如何判断一个字符串是否为合法日期 JavaServer Page(JSP)简介1 JavaServer Pages (JSP) 1.0简单介绍 ---III JavaServer PagesTM 白皮书 Java布局管理器深入讨论 Java代码编写一般性指导 JAVA声音处理方法 Java网络功能与编程 一 JAVA网络功能与编程 二 JAVA动态效果(1)表格时钟 java跟microsoft转 Java混淆编译器 Java入门理解构造器 Java性能优化(上) Java性能优化(下) JAVA学习,是一条漫长道路 java学习体悟 Java与C/C 区别 Java语言字符处理 java在Linux下web应用 Java正则表达式详解 java关于html转换 Java利用散列表实现股票行情查询 Java文问题详解 java有关日期显示问题 java怎样使用库文件(import 文件) JAVA专业术语集 JB4文教程 Jbuider4新特性介绍 Jbuilder4.0 使用心得 JBuilder5 Weblogic 6.0 安装配置全攻略 JBuilder 4 概观 JBUILDER 5新增功能介绍 jBuiler 4白皮书 JCWC exam is available now jdbc3RowSet 接口规范 JDBC Connection Pool JDBC 解决方案 JDBC 入门 JDBC 示例 JDBCTM 指南:入门 JDBCTM 指南:入门2 - 连接 JDBCTM 指南:入门3 - DriverManager JDBCTM 指南:入门4 - Statement JDBCTM 指南:入门5 - ResultSet JDBCTM 指南:入门6 - PreparedStatement JDBCTM 指南:入门7 - CallableStatement JDBC和ODBC JDBC技术介绍 JDBC接口技术 JDK1.2关于JDBC文问题解决方案 Jive 设计模式 JMS资料 Jrun 快速定位编译时期错误位置 JRun常见问题回答 (JRun 文 FAQ) JSP9种基本内置组件(可与ASP6种内部组件相对应) JSP - FAQ Jsp JavaBean循序渐进教程 JSP Insider 5 在JSP使用JavaMail JSP 模板 JSP 构 架--2种方式 JSP 项目设计方法论 jsp beans实现读取数据库例子 Jsp JavaBean循序渐进教程 JSPServlet 汉字编码问题 jspservlet文问题解决 JSP标签库介绍 JSP传递参数方法 JSPlogin程序代码 JSPmysql_jdbc驱动程序 JSP内部对象--JSP开发入门四 jsp调用oracle存储过程 jsp发送邮件实例 JSP高级技术如何开发动态网站 jsp或者说JAVA倒底有多快? jsp简介 JSP简明教程:行为标签与实例 JSP里request变量列表 JSP例程 - 获取各种CGI环境变量JSP例程 - 获取各种CGI环境变量(1.1版本) JSP例程 - 获取各种CGI环境变量 JSP例程 - 在JSP定义函数 JSP其他相关资源--JSP开发入门五 JSP入门 JSP实现在浏览器关闭cookies情况下会话管理 JSP数据库操作例程 - 存储过程 - JDBC-ODBC - SQL Server - 1.1版本 JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle JSP文件操作例程 - 读文件 jsp文件操作之读取篇 jsp文件操作之写入篇 jsp文件操作之追加篇 JSP由浅入深(1)—— 熟悉JSP服务器 JSP由浅入深(4)—— Scriptlets JSP由浅入深(5)—— Scriptlets和HTML混合 jsp与applet通信 jsp与ejb通信 jsp与ejb通信 JSP与JavaBean --JSP开发入门三 JSP与Servlets区别 JSP语法 JSP语法基本原理--JSP开发入门二 jsp源码实例(输出) jsp源码实例(获取表单参数) jsp源码实例(获取jsp各种参数) jsp源码实例(cookie) jsp源码实例(搜索引擎) JSP变量定义域 Jsp内部对象,及其所对应JAVA对象 jsp同时应用“存储过程”和“javabean”例子 JSP文留言簿 JSP文问题解决方案 js与applet相互调用 Language Fundamentals Linux-JSP-JDBC-MySQL测试 - Insert Linux-JSP-JDBC-MySQL测试 - Select MD5算法(看在你是女孩份上,给你一个吧) MySQLJDBC驱动程序下载地址 NT下安装JSP Operators and Assignments(1) Operators and Assignments(2) OracleID自增得方法(转自JSP001) orcale测试实例 Orion下自定义Tag Overloading overriding runtime type and object orientation (1) Overloading overriding runtime type and object orientation (2) PreparedStatement Reading and Writing a Properties File(From Sun) redhat6.1 apache tomcat安装指南-jsp使用 RedHat7.0下安装Oracle8i Resin服务器平台介绍 Resin与IIS结合一些补充技巧 ResinJSP范例 servlet2.3 Servlet Step by Step Servlet 和 XML:互为补充 Servlet和JSP通信 Servlet基础例程 - HelloServlet - Linux版本 Servlet基础例程 - HelloServlet - NT版本 soap规范(1) soap规范(2) soap规范(3) soap规范(4) soap规范(5) soap规范(完) 配置J2EE支持Mysql SSL與數位認證 Stream Tokenizing(分解字符串) Sun Java Web服务器远程可执行命令漏洞 Threads Timer Task 简单范例(相当触发器,转自Sun) TOMCAT IIS配置方法 TomCat和Jakarta计划 Tomcat文手册 url安全在 netscape6.0 Use Java to implement the UBB future vaj 和 jbuid使用感受 Vector在Java编程应用 weblogic6.0使用心得 WebSphere快速入门 WIN2000 下JSP环境建立(IIS resin j2sdk) windows环境下安装tomcat 修订版本 XML和J2EE组合技术 XP 精华----如何使 Java 项目获得更大成功 安装 JRun 安装好你机器来使用JSP 安装好你机器来使用JSP--JSP开发入门一 版主强烈推荐问问题方式 本人在玩JB4时候一些发现 编写跨平台Java程序注意事项 补充两个有用关于时间函数 不难,请看javamail 发送附件例子 不需ODBC可由IP地址与端口号建立与SQLSERVER连接 初学jsp心得 从数据库读取并生成图片Servlet 带JavaBean JSP EJB 编程模型 布署和使用 Enterprise JavaBeans 组件 EJB 体系结构历史和目标 第一次jsp接触(win32安装版) 多线程程序设计 发邮件时终于可以通过sinasmtp验证了 发主流技术评价之JSP 分别用java Application 及 JSP调用javaBean例子 分布式对话服务器管理 给javabeans礼物一篇:JSP基本语法 给你个比较全关于时间操作东西 给你看看我一个方法 给你一个SERVLET保治百病 给你一个servlet例子,JSP差不多 给你一篇ibm介绍Structs文章 给所有刚学JAVA以及常来此版兄弟 根据dtd读写xml实例 关于[开心就好]提出“如何杀死一只鸡”问题讨论意见 关于cachedRowSet一篇文章 关于finalize()方法解释 关于java Classpath全解java入门 关于Servlet、Jsp多国语言显示 关于sessionListener 关于回答网友有关servlet和servlet之间通信问题 关于扰乱器与反编译 关于间件问答实录(MIDWARE FAQ) 果果来看(一个封装了基本JDBC操作类) 好东西介绍,直接用 java 命令行动态生成jpg文件 Jive 设计模式 为什么执行JAVA程序时,会出现Exception in threadmain java.lang.NoClassDefFoundError错 回答以前网友提出时间问题 win2000server下安装tomcat后,再安装apache有什么好处 回复java新手问题 回复XML 和Java 我把resin和iis结合起来以后,asp程序就不能用了 如何区分鼠标事件左键点击还是右键点击谢过先 请问哪里有jboss有关配置教程 如何在Web页上实现文件上传 谁能讲一讲setproperty(name=)用法或介绍相关资料 谁有用java mail 收 html 信件程序呀 有没有现成class实现crypt算法 在jsp作HTTP认证方法 基础知识 -- JavaDoc用法 基于MySQL高性能数据库应用开发(使用C++操作MYSQL) 几则JSP入门知识总结 Java 对文件读写操作之比较 简单例子 簡易物件存取協定 建议用JUNIT建立测试类 将 Microsoft Internet Information Server 用作 Java servlet 引擎 将 Microsoft Internet Information Server 用作 Java servlet 引擎 一 将 Microsoft Internet Information Server 用作 Java servlet 引擎 二 微软 vs Sun 具体见内 看看String构造方法 Java vs .NET 非官方观点 困扰JSP一些问题 利用Java实现zip压缩解压缩 利用Java实现串口全双工通讯 利用RamdonAccessFile来实现文件追加 利用UDP Sockets技术实现IP多点传送 两种INCLUDE方式不同 了解Java,便了解了微软.NET 另一种bbs设计思路,请各位高手给予评价 浏览器显示JApplet(可解决引入Swing包问题) 论坛搜索《sm版》 内有一篇文章或许有用 内置加密软件嵌入用途Java软件今秋问世 评论(选自CSDN) 签名一个使用插件1。3版Java小程序 浅谈4种类型JDBC驱动程序 取时间小类 让JSP页面过期, 即保证每次JSP页面都是最新 数据分页显示 - JDBC 2.0 - Oracle 认 识 JINI 如何捕获视频 如何捕获音频及输出音频 如何成为一个优秀jsp程序员 如何从mail server删除一条消息例子 如何设置application 变量 如何用 servlet 打开非 HTML 格式文档 如何在 Java 应用程序读取 8 位和 24 位 Microsoft Windows 位图 如何在 jdbc 印出文 如何制作透明组件 三种Web开发主流技术ASP-PHP-JSP评价 什么是Servlet以及Servlet优越性 实体对象抽象以及一种基于数据库实现 使用 Java 连接处于proxy(or 防火墙)之外HTTP服务器 使用 XML 小服务程序配置文件配置小服务程序 使用Java Applet访问数据库 使用JavaBean高效处理JSP 使用JAVA开发CORBA应用 使用JSP读取客户端信息 使用servlet和jsp上载文件 试验win2k在apache1.3上配置tomcat3.1 数据类型对软件性能影响 提高Java代码可重用性三个措施 通过socket访问数据库 通用数据库操作BEAN 推出weblogic oracle 分页 推荐几个好资源 往JRE里增加字体 为什么jsp不能取代servlet 我面向对象程序观 我认为JSP有问题 无状态Enterprise JavaBeans观点 小议如何在 Applet 显示图象 小议如何在 Application 显示图象 小议如何在组件上显示图象 Java做一个最简单通话程序 Enterprise JAVABEANS(第二版) 续 太长了 学习JAVA第一方案 也谈新郎、sohu新闻系统技术,当然是怎么用jsp实现 一份 tomcat vs resin 测试报告 一个 Java,各自表述 一个applet---servlet通讯例子 一个JDBC-ODBC桥字符集参数例子 一个进行Base64编码类 一个连接池例子 jspuseBean scope=xxscope属性 一个最简单 JavaBeanMaker 一些非常有用JAVA常用方法 以下这段servlet代码变为jsp大致写法是 异常处理优劣观 用 Java 保存位图文件 用 Java 保存位图文件 用 javabean 来实现 MySQL 分页显示 用 JSP 在客户端生成 JavaScript 代码来实现表单校验 用 Servlets 动态生成图片 用javamail发邮件(含附件),用jBuilder3实现Java绘制K线 用javacanendal 如何计算两个日期之间每一日 用JAVA转换简繁体基础知识 用JDBC访问一个数据库 用JSP构建动态网站 用JSP和数据库做购物车源程序 用JSP链接到数据库 用JSP实现一个日历程序 用Swing实现数据表格功能 用Swing制作欢迎屏幕 用连接池提高Servlet访问数据库效率 邮件例程 - JavaMail - 发送HTML邮件 杂谈 By Haha 在JAVA应用程序如何实现FTP功能 在Java获取系统属性 在JSP编译时候,服务器内部做了什么 在JSP页面实现检索数据分页显示 在jsp发送email 在JSP写text文件 在Linux上安装Tomcat 在windows2000 server文版上安装apache 在Windows上安装Tomcat 在按钮上放图标 在浏览器关闭cookie情况下进行会话管理 在网页上发布统计曲线 怎样避免NullPointerExceptions 一个查询sqlserver 一个扫描整个网段多线程程序, 不过利用ping加参数 真正apache,tomcat,mod_jk安装指南 Java 1.4 即将发布版本性能和新功能一览 间件与jsp 学不会JAVA,消不了忧愁 EJB 体系结构历史和目标 关于多线程 类深入研究 如何学习java JAVA无用论 java文件对象操作 微软98年关于MTS和EJB比较说明文件 准备翻译j2eedoc 最大化JAVA代码可重用性 最大限制地提高代码可重用性 最简单时间格式类 最近比较烦(程序员版)
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值