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

[源码和文档分享]利用哈希表实现电话号码查询系统 第一章 需求分析 1.1 问题描述 设计一个电话号码查询系统,为来访的客⼈提供各种信息查询服务。 1.2 基本要求 设计每个记录有下列数据项:电话号码、用户名、地址 从键盘输入个记录,分别以电话号码和用户名为关键字建立不同散列表存储 采用一定的方法解决冲突 查找并显示给定电话号码的记录... 阅读详情

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

Java面试准备记录 Java面试的准备记录 阅读详情

相关推荐

数据结构核心概念与实战应用全解析

数据结构是计算机科学中组织和存储数据的基础技术,其核心在于通过特定方式优化数据的访问与操作效率。从数组、链表等线性结构到树、图等非线性结构,不同数据结构在时间复杂度与空间复杂度上各有优劣。在实际工程中,合理选择数据结构能显著提升系统性能,例如哈希表实现O(1)快速查找、B+树优化磁盘IO效率。现代开发中,并发安全的sync.Map和持久化数据结构等技术不断演进,满足高并发和函数式编程等场景需求。掌握数据结构原理与选型技巧,是解决电商搜索优化、社交网络分析等实际问题的关键,也是提升代码性能与可维护性的基础。

weixin_30340617的博客 503

JAVA获得股票数据大全

最近一个朋友想将股票历史数据导入到数据库中进行分析,目前市场上有很多股票行情交易软件,各种软件提供了丰富的分析和展示功能,而且基本上是免费的。但这些数据都是在线的、无法统一地下载到本地进行分析,于是上网找了些资料,有的是将程序到新浪搜狐的财经频道或其他财经类网站抓取并分析网页,这种方法操作性不强而且准确率较低,遇到广告或网页变动时风险较大。于是找到了Sina股票数据接口,这个接口是通过在IE端输入

fatOwen的专栏 1万+

【信息科学与工程学】计算机科学与自动化——第八十一篇 Java分布式软件高并发/高可用算法01

4. 消息队列(如Kafka的Topic分区,本质是范围)。3. 若是ACCEPT事件,bossGroup线程接受连接,创建SocketChannel,并将其注册到workerGroup的一个EventLoop的Selector上,关注READ事件。1. 分布式缓存分片(如Redis Cluster)。4. 分布式文件存储(如Ceph CRUSH)。6. 调用栈的模拟(如协程)。3. 服务网格(如Istio)的基础。2. 本地缓存与集中式缓存(如Redis)的一致性维护。3. 静态数据(如配置)缓存。

weixin_49199313的博客 1234

java获取基金实时数据_获取股票实时交易数据的方法

var hq_str_sh600151="航天机电,7.08,7.09,6.95,7.08,6.90,6.95,6.96,4368014,30484831,2900,6.95,5700,6.94,11687,6.93,19700,6.92,28200,6.91,700,6.96,6000,6.97,26600,6.98,21701,6.99,104259,7.00,2012-06-12,15:03...

weixin_36433950的博客 1412

Java Swing股票交易模拟系统:从数据结构选型到撮合引擎设计

在计算机课程设计中,数据结构与算法不仅是理论考试的重点,更是工程实践的基石。以队列、堆、哈希表等基础数据结构为切入点,理解它们如何支撑起订单簿撮合、行情缓存与持仓映射等真实业务场景,是区分优秀与合格代码的关键。优先队列将买卖撮合的复杂度从O(n²)优化至O(n log n),环形缓冲以O(1)开销计算滑动窗口均价,而ConcurrentHashMap则在多线程行情刷新中保障了读写性能。从数据库事务一致性到SwingWorker的EDT线程安全,这些技术共同构建出一个健壮的Java Swing股票交易模拟系统

weixin_29879257的博客 205

实时股票查询系统

平台:eclipse.基于java的一个实时股票查询系统,使用JavaFx来做界面,可实现查询sh系列股票以及K线图的实时查询,使用的是新浪的股票查询接口,内含实际效果图

获取实时股票行情数据

通过编程语言获取实时股票行情数据

嘴软心硬 1万+

完整指南:从基础到高级使用 Semantic Kernel

通过本文的学习,你已经掌握了从基础到高级的使用方法。安装并配置。使用简单的文本生成和自然语言处理任务。利用任务链和工具扩展构建复杂的工作流。通过记忆管理上下文,创建更智能的应用。扩展多模态处理能力,集成图像和音频分析。将应用部署到云端,并通过 Azure Functions 提供智能服务。无论是构建简单的对话应用,还是创建多模态智能服务,都提供了强大的工具和灵活的扩展机制。希望这篇文章能帮助你更好地理解并运用这个框架,构建出更加智能和高效的应用。

net core ,前端 ,python 全栈开发 2806

java 股票 代码_Java中利用散列表实现股票行情的查询_java

---- 在java中,提供了一个散列表类Hashtable,利用该类,我们可以按照特定的方式来存储数据,从而达到快速检索的目的。本文以查询股票的收盘数据为例,详细地说明java中散列表的使用方法。一、散列表的原理---- 散列表,又称为哈希表,是线性表中一种重要的存储方式和检索方法。在散列表中,可以对节点进行快速检索。散列表算法的基本思想是:由结点的关键码值决定结点的存储地址,即以关键码值k为自...

weixin_36225248的博客 647

一、数学建模层次分析法(AHP)【清风数学建模个人笔记】

层次分析法: 层次分析法主要用于解决评价类问题(例如:选择哪种方案更好、哪位员工、运动员等表现得更优秀) 评价类问题: 分析问题得出评判问题的子标,分别给不同子标赋予权重(权重和要为1) ...

m0_58882109的博客 1万+

Android TV远程调试全攻略:从开发者模式开启到ADB连接(附常见问题排查)

本文提供了一份详尽的Android TV远程调试实战指南,涵盖从开启开发者模式、配置网络ADB连接到高效调试与深度排错的完整流程。文章重点解析了通过Wi-Fi进行远程调试的核心步骤,并针对常见的连接失败、授权问题等提供了系统性的解决方案,旨在帮助开发者为Android TV应用开发构建稳定高效的调试环境。

1342

java有没有获取股票行情的库_Java中利用散列表實現股票行情的查詢

---- 在java中,提供了一個散列表類Hashtable,利用該類,我們可以按照特定的方式來存儲數據,從而達到快速檢索的目的。本文以查詢股票的收盤數據為例,詳細地說明java中散列表的使用方法。一、散列表的原理---- 散列表,又稱為哈希表,是線性表中一種重要的存儲方式和檢索方法。在散列表中,可以對節點進行快速檢索。散列表算法的基本思想是:由結點的關鍵碼值決定結點的存儲地址,即以關鍵碼值k為自...

weixin_35144647的博客 259

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

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

在java中,提供了一个散列表类Hashtable,利用该类,我们可以按照特定的方式来存储数据,从而达到快速检索的目的。本文以查询股票的收盘数据为例,详细地说明java中散列表的使用方法。 一、散列表的原理  散列表,又称为哈希表,是线性表中一种重要的存储方式和检索方法。在散列表中,可以对节点进行快速检索。散列表算法的基本思想是:由结点的关键码值决定结点的存储地址,即以关键码值k为自变量,通过一定

herry2008的专栏 984

SUMO仿真教程(1) ——安装环境的设置(Windows 10系统)

SUMO安装环境的设置 目录一.SUMO下载的官方网址二.下载步骤:三.环境设置:1.打开设置环境变量的界面2.用户(Administrator)变量设置3.系统变量设置四.总述 一.SUMO下载的官方网址 sumo的下载地址: 二.下载步骤: 1.以sumo1.8.0为示例进行演示,点击下载地址; 2.选择Windows64位的安装版本,如下图所示: 3.点击对应版本会跳转到如下图所示的界面,等待几秒后会自动下载(温馨提示:请将下载路径提前设置好): 4.到目标存储路径下查看下载完成的SUMO(本

weixin_50632459的博客 1万+

基于STM32的宠物智能照护嵌入式系统设计

嵌入式系统是实现物联网终端设备本地化感知、决策与执行的核心技术载体,其关键在于多传感器融合、低功耗执行控制与轻量级云边协同。本文围绕环境监测(温湿度、烟雾、余粮)、机电执行(步进电机食盘、继电器风扇)和可靠通信(MQTT+ESP8266)三大技术主线,深入解析STM32F103在资源约束下的外设调度策略、ADC采样抗干扰设计、DHT11时序精准控制及HX711称重滤波算法等工程实践要点。系统强调本地闭环优先原则,确保离线基础功能可用,同时通过阿里云IoT平台实现远程监控与告警联动,为中小型智能硬件项目提供可

weixin_29155599的博客 294

数据结构三层模型:逻辑结构、存储结构与ADT的本质关系

抽象数据类型(ADT)是软件工程中封装数据行为的核心契约,其根基在于对逻辑结构(如线性表、树、图)的抽象建模,再通过具体存储结构(如数组、链表、哈希表)在物理内存中实现。理解三者递进关系——逻辑结构定义‘是什么关系’,存储结构解决‘如何高效存取’,ADT确立‘提供什么能力与保证’——是设计可维护、可扩展、高性能系统的关键。该模型广泛应用于Redis底层设计、Linux内核内存管理、分布式缓存选型等真实场景,也是考研数据结构与大厂后端面试的核心底层思维。

weixin_34082695的博客 326

MIKE 21 教程 2.9 初始条件(Initial Conditions),边界条件Boundary Conditions),解耦(Decoupling)

本节讲解初始条件与边界条件的设置。这两个模块如设置有误则极易出现模型崩溃。

Hello Word 4801

IT文档 3

Delphi数学运算函数Delphi数据压缩处理Delphi数据库面向对象编程范例Delphi的TWebBrowser编程综述Delphi的嵌入式汇编语言与Windows函数调用Delphi程序使用资源的释放Delphi编写网络程序的安全措施Delphi编程中的“流”Delphi编程:完全控制桌面的实现Delphi趣味编程实例三则Delphi面向对象编程的20条规则Delphi:开发工具史上的奇迹

iamhere1956的专栏 622

Python爬虫教程:抓取地方政府网站的公开文件与政策信息

Web爬虫是指一种自动化脚本,用于模拟人类浏览器访问网页、提取网页内容的数据抓取工具。发送请求到目标网页;获取网页内容;解析网页内容,提取所需数据;将数据保存或进一步处理。爬虫可以抓取各种形式的数据,如文本、图片、文件等。本教程将重点展示如何抓取地方政府网站上公开的政策文件、公告等信息。许多政府网站都会采取一定的反爬虫措施,防止大量数据被爬取。IP封锁:如果短时间内大量请求来自同一IP,可能会被封锁。验证码:一些网站会使用验证码来验证访问者是否为机器人。动态加载。

2201_76125261的博客 1981

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

编程助手V1-----MAgent入门

2. Agent 的扩展能力与工具化 工具调用实现功能增强:Agent 通过调用外部工具(如天气查询、新闻获 取、股票行情)来弥补大模型的实时性缺陷,工具越丰富,Agent 的能力越强大。1. 大模型的核心定位与局限性 百科全书式知识底座:大模型被定义为智能体的“大脑”,类似于百度百科或 维基百科,通过海量参数(万亿级)存储知识库,能够解决大部分文字性问题。优点:支持文字、图片、语音输入,也不用像其它AI一样需要输入很多文字描绘自己想要的,用简短的语言就可以,逻辑推理能力好,代码也很好。

2501_92640044的博客 163

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

网址收集(知识库)

       `we知识大纲: interview   everyday 1、方便快捷的查找过往知识! 2、实时更新,并积累分类,并总结入博客 3、两部分内部:A、对于知识的经验自总结                          B、参考网址的记录 ********************************************************* http:/...

Move Fast! 2万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

后端面试面经每日随机day6

虚拟内存的概念虚拟内存是计算机系统内存管理的一种技术,通过将主存(RAM)和磁盘存储结合使用,使得程序能够访问比实际物理内存更大的地址空间。操作系统将内存数据分为固定大小的页(Page),通过页表(Page Table)映射到物理内存或磁盘上的交换空间(Swap Space),从而扩展可用内存容量。虚拟内存的工作原理当程序运行时,操作系统会将当前需要的页面加载到物理内存中,暂时不用的页面存储在磁盘的交换区域。

weixin_46598932的博客 643

Caffeine + Redis + MySQL:构建强大的三级缓存机制

这种三级缓存机制构建了一个多层次的数据存储与访问体系。当应用收到数据请求时,首先会在速度最快的本地内存缓存 Caffeine 中查找数据,如果命中,则直接返回数据,大大减少了数据获取的延迟。若 Caffeine 中未找到数据,则会进一步在分布式缓存 Redis 中进行查询。Redis 作为高性能的分布式缓存系统,能够应对大量并发请求,并提供丰富的数据结构支持。

Cool 2335

Desktop Frames Plus 插件引擎开发指南:从零实现 IFramePlugin 打造自定义桌面插件

Desktop Frames Plus 是一款开源的 Windows 桌面图标管理工具,它在桌面上创建虚拟"边框"(Frame),帮你把杂乱的图标收纳成整齐的区块。更强大的是,它内置了一套**插件引擎**:VU 表、系统性能监控、迷你计算器等 7 个官方插件都实现了同一个接口 `IFramePlugin`。本文是一份从零开始的 Desktop Frames Plus 插件开发教程,带你亲手实现一个

gitblog_01080的博客 473
上一篇: struts中文的解决『文摘』
下一篇: Vector在Java编程中的应用
ealpha
博客等级 码龄23年 1粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值