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

Posted 结点

篇首语:只有忍得住寂寞,才能够见明日的繁华。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中利用散列表实现股票行情的查询相关的知识,希望对你有一定的参考价值。

Java中利用散列表实现股票行情的查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   在java中 提供了一个散列表类Hashtable 利用该类 我们可以按照特定的方式来存储数据 从而达到快速检索的目的 本文以查询股票的收盘数据为例 详细地说明java中散列表的使用方法     一 散列表的原理   散列表 又称为哈希表 是线性表中一种重要的存储方式和检索方法 在散列表中 可以对节点进行快速检索 散列表算法的基本思想是 由结点的关键码值决定结点的存储地址 即以关键码值k为自变量 通过一定的函数关系h(称为散列函数) 计算出对应的函数值h(k)来 将这个值解释为结点的存储地址 将结点存入该地址中 检索时 根据要检索的关键码值 用同样的散列函数计算出地址 然后 到相应的地址中去获取要找的结点数据 因此 散列表有一个重要特征 平均检索的长度不直接依赖于表中元素的个数    散列表最重要的一个指标是负载因子 即散列表中结点数目与表中能容纳的总结点数的比值 它描述了散列表的饱和程度 负载因子越接近 内存的使用效率越高 元素的寻找时间越长 同样 负载因子越接近 元素的寻找时间越短 但内存的浪费越大 Hashtable类缺省的负载因子为     二 Hashtable类   Hashtable类为我们提供了散列表完整的功能 可以让我们很方便地构造和使用散列表 查询信息    创建散列表对象      Hashtable类的构造器主要有下面几种形式     public Hashtable(int initialCapacity float loadFactor)   public Hashtable(int initialCapacity)   public Hashtable()   在本文的实例中 我们使用了最简单的一种   Hashtable stockInfo = new Hashtable();       充填数据    当构造了Hashtable对象后 我们就可以将数据填入该对象中 以便以后查询 Hashtable类提供了put方法来完成数据的装填 其原型如下      public synchronized Object put(Object key Object value)      查询数据      查询数据可以使用get方法 其原型如下      public synchronized Object get(Object key)      其它常用的方法     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 下面是文件中的一行数据    宏图高科      下面是完整的源程序 在JDK 下使用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 button ;  private String quoteid quotename;    public void init()    add(new Label( 股票代码 ));  stockID = new TextField( );  add(stockID);  button = new Button( 查询 );  button addActionListener(this);  add(button );  resize( );      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+ : );  g drawString( 股票名称 + 前收 + 今开 + 最高   + 最低 + 收盘 + 交易量 + 交易金额 );  g drawString(quotename );      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放到一l文件中 直接使用jdk 提供的appletviewer 其命令行的使用方法如下   d:\\jdk \\bin\\appletviewer l   cha138/Article/program/Java/Javascript/201311/25401

相关参考

知识大全 java的hashtable的用法

  在main()中每次产生一个随机数字它都会封装到一个Integer对象里使句柄能够随同散列表一起使用(不可对一个集合使用基本数据类型只能使用对象句柄)containKey()方法检查这个键是否已经

知识大全 查找 - 散列技术 - 散列表上的运算

  散列表上的运算  散列表上的运算有查找插入和删除其中主要是查找这是因为散列表的目的主要是用于快速查找且插入和删除均要用到查  找操作  散列表类型说明  #defineNIL//空结点标记依赖于关

知识大全 文件 - 散列文件

  散列文件的组织方式  散列文件是利用散列存储方式组织的文件亦称直接存取文件即根据文件中关键字的特点设计一个散列函数和处理冲突的方  法将记录散列到存储设备上  散列表与散列文件比较  >  基桶和

知识大全 查找 - 散列技术 - 散列表的概念

  散列方法不同于顺序查找二分查找二叉排序树及B树上的查找它不以关键字的比较为基本操作采用直接寻址技术在理想情况下无须任何比较就可以找到待查关键字查找的期望时间为O()  散列表的概念  散列表  设

知识大全 查找 - 散列技术 - 处理冲突的方法(二)

  利用线性探测法构造散列表  【例】已知一组关键字为()用除余法构造散列函数用线性探查法解决冲突构  造这组关键字的散列表  解答:为了减少冲突通常令装填因子α  数为:h(key)=key%13。

知识大全 数据结构考研分类复习真题 第九章 集合[11]

  散列表的地址区间为散列函数为H(K)=Kmod采用线性探测法处理冲突并将关键字序列依次存储到散列表中【北方交通大学一()(分)】  ()元素存放在散列表中的地址是(  &nbs

知识大全 oracle中的树型查询

  在项目开发中树型结构是经常被使用的通常情况下我们对查询的结果集使用一些免费的js文件就能达到很好的显示效果比如    但是有时候我们需要对下拉列表也提供树型结构(比如论坛的板块跳转)这个时候我们就

知识大全 数据结构考研分类复习真题 第九章 集合[27]

  设散列函数为H(K)=KMOD解决冲突的方法为链接法试将下列关键字集合依次插入到散列表中(画出散列表的示意图)并计算平均查找长度ASL【首都经贸大学三(分)】  已知散列表的地址空间为A[]散列函

知识大全 ASP.NET中利用存储过程实现模糊查询

ASP.NET中利用存储过程实现模糊查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一建立存

知识大全 外国推出的中国股票指数在哪里可以查询到每天的交易结果

外国推出的中国股票指数在哪里可以查询到每天的交易结果?比如标普中国500指数东方财富网,全球指数。或者,电脑下载安装同花顺。可以看大盘,全球股市。我国推出的股票指数期货的标的指数是?沪深300中国股票