麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java中利用散列表實現股票行情的查詢

2019-11-18 13:27:52
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久草在线播放视频 | 91精品国产91久久久久久不卞 | 国产一级一国产一级毛片 | 午夜小电影 | 久草导航 | 成人免费在线视频播放 | 欧美成人二区 | 一级毛片在线免费观看视频 | 视屏一区 | 亚洲一区二区三区视频免费 | 亚洲第五色综合网 | 亚洲黑人在线观看 | 久久久久久久久淑女av国产精品 | 嫩草www| 看免费的毛片 | 成人午夜免费网站 | 久久久久99一区二区三区 | 欧美亚洲综合在线 | 免费国产自久久久久三四区久久 | 美女一级视频 | 国产精品视频六区 | 中文字幕精品在线观看 | 欧美一区二区三区中文字幕 | 91丝袜 | 羞羞视频免费视频欧美 | 亚洲精品v天堂中文字幕 | 午夜精品在线视频 | 小情侣嗯啊哦视频www | 久久久一区二区精品 | 毛片免费在线观看 | 国产精品爱久久久久久久 | 777zyz色资源站在线观看 | h色网站免费观看 | 爱高潮www亚洲精品 欧美黄色一级片视频 | 国产精品久久久久久久久久久久午夜 | 91av原创 | 嗯~啊~弄嗯~啊h高潮视频 | 露脸各种姿势啪啪的清纯美女 | 一级免费特黄视频 | 夜夜夜精品视频 | 国产小视频在线观看 |