﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-笔头。。-文章分类-dom4j、xml与java</title><link>http://www.blogjava.net/onedaylover/category/28942.html</link><description>实践启示</description><language>zh-cn</language><lastBuildDate>Mon, 14 Jan 2008 10:31:40 GMT</lastBuildDate><pubDate>Mon, 14 Jan 2008 10:31:40 GMT</pubDate><ttl>60</ttl><item><title>dom4j的单元素查找性能和替代方案</title><link>http://www.blogjava.net/onedaylover/articles/175195.html</link><dc:creator>如果有一天de</dc:creator><author>如果有一天de</author><pubDate>Mon, 14 Jan 2008 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/onedaylover/articles/175195.html</guid><wfw:comment>http://www.blogjava.net/onedaylover/comments/175195.html</wfw:comment><comments>http://www.blogjava.net/onedaylover/articles/175195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/onedaylover/comments/commentRss/175195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/onedaylover/services/trackbacks/175195.html</trackback:ping><description><![CDATA[问题描述：比如从xml中读取单个数据信息，文件数据信息为几k左右。<br />
解决方案：方案一.从xml文件中读取单个信息，每次读取都重新打开文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方案二.将文件信息放到内存中，每次通过文件信息句柄查找<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  方案三.从内存中读取，将文件存储在hashmap中，每次通过hashmap映射<br />
技术：使用dom4j、xpath<br />
example1: 通过IATA查找对应的ICAO（IATA，ICAO参考注）<br />
&nbsp;&nbsp;&nbsp;<strong> airlines.xml</strong><br />
&nbsp;&nbsp;&nbsp; 存储了airline的IATA和ICAO，root是&lt;airlines&gt;,root的子元素为&lt;element&gt;，&lt;element&gt;的属性为IATA,ICAO<br />
&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">airlines</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">element&nbsp;</span><span style="color: #ff0000;">IATA</span><span style="color: #0000ff;">="AL"</span><span style="color: #ff0000;">&nbsp;ICAO</span><span style="color: #0000ff;">="TXC"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">element&nbsp;</span><span style="color: #ff0000;">IATA</span><span style="color: #0000ff;">="AY"</span><span style="color: #ff0000;">&nbsp;ICAO</span><span style="color: #0000ff;">="FIN"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">airlines</span><span style="color: #0000ff;">&gt;</span></div>
&nbsp;&nbsp;&nbsp;  AirlinesXml.java<br />
&nbsp;&nbsp;&nbsp; 方法parse、getDocment解析xml文件，比较简单，不解释了<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;Document&nbsp;getDocument()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;DocumentException<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(doc</span><span style="color: #000000;">==</span><span style="color: #0000ff;">null</span><span style="color: #000000;">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;parse(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(fileUrl));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;doc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;Document&nbsp;parse(File&nbsp;file)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;DocumentException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;saxReader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXReader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;saxReader.read(file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;doc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
&nbsp;&nbsp; 方法getICAO()，striata，通过xpath直接查找对应iata的icao ，第一调用该方法时读取文件，保留doc，以后从doc中查找对应信息<br />
&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;如果没有则返回null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;str 当前的strIATA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return String icao</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;String&nbsp;getICAO(String&nbsp;strIATA)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tmp</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;xpathStr</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">//element[@IATA='</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">str</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">']</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc</span><span style="color: #000000;">=</span><span style="color: #000000;">getDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;node</span><span style="color: #000000;">=</span><span style="color: #000000;">(Node)&nbsp;doc.selectSingleNode(xpathStr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(node</span><span style="color: #000000;">!=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp</span><span style="color: #000000;">=</span><span style="color: #000000;">node.valueOf(</span><span style="color: #000000;">"</span><span style="color: #000000;">@ICAO</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(DocumentException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: #000000;">"</span><span style="color: #000000;">没有该文件，文件url为</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">fileUrl,e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
&nbsp;&nbsp;&nbsp; 方法：getIcaoFromMap()与前一方法的不同在于第一次xpath信息遍历所有信息存储在hashmap中，以后通过hashmap查找<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;String&nbsp;getICAOFromMap(String&nbsp;iataStr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(airlineMap</span><span style="color: #000000;">==</span><span style="color: #0000ff;">null</span><span style="color: #000000;">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;xpath</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">//element[@IATA]</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;airlineMap</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HashMap</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String,&nbsp;String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc</span><span style="color: #000000;">=</span><span style="color: #000000;">getDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list</span><span style="color: #000000;">=</span><span style="color: #000000;">doc.selectNodes(xpath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Iterator&nbsp;iter</span><span style="color: #000000;">=</span><span style="color: #000000;">list.iterator();iter.hasNext();)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;node</span><span style="color: #000000;">=</span><span style="color: #000000;">(Node)iter.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;airlineMap.put(node.valueOf(</span><span style="color: #000000;">"</span><span style="color: #000000;">@IATA</span><span style="color: #000000;">"</span><span style="color: #000000;">),&nbsp;node.valueOf(</span><span style="color: #000000;">"</span><span style="color: #000000;">@ICAO</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(DocumentException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: #000000;">"</span><span style="color: #000000;">没有该文件，文件url为</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">fileUrl,e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;airlineMap.get(iataStr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
&nbsp; main函数<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;time1</span><span style="color: #000000;">=</span><span style="color: #000000;">System.currentTimeMillis();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(getICAO(</span><span style="color: #000000;">"</span><span style="color: #000000;">OV</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;time2</span><span style="color: #000000;">=</span><span style="color: #000000;">System.currentTimeMillis();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">getICAO:第一次</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time2</span><span style="color: #000000;">-</span><span style="color: #000000;">time1)</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time2</span><span style="color: #000000;">-</span><span style="color: #000000;">time1)</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(getICAO(</span><span style="color: #000000;">"</span><span style="color: #000000;">CA</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;time3</span><span style="color: #000000;">=</span><span style="color: #000000;">System.currentTimeMillis();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">getICAO:第二次</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time3</span><span style="color: #000000;">-</span><span style="color: #000000;">time2)</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time3</span><span style="color: #000000;">-</span><span style="color: #000000;">time2)</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(getICAOFromMap(</span><span style="color: #000000;">"</span><span style="color: #000000;">CA</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;time4</span><span style="color: #000000;">=</span><span style="color: #000000;">System.currentTimeMillis();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">getICAOMap:第一次</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time4</span><span style="color: #000000;">-</span><span style="color: #000000;">time3)</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time4</span><span style="color: #000000;">-</span><span style="color: #000000;">time3)</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(getICAOFromMap(</span><span style="color: #000000;">"</span><span style="color: #000000;">OV</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;time5</span><span style="color: #000000;">=</span><span style="color: #000000;">System.currentTimeMillis();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">getICAOMap:第二次</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time5</span><span style="color: #000000;">-</span><span style="color: #000000;">time4)</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">(time5</span><span style="color: #000000;">-</span><span style="color: #000000;">time4)</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
运行结果为：<br />
NAN<br />
getICAO:第一次672 0<br />
CCA<br />
getICAO:第二次47 0<br />
CCA<br />
getICAOMap:第一次125 0<br />
NAN<br />
getICAOMap:第二次0 0<br />
<br />
可见xpath中查找单个数据的时间比遍历为map后再在内存的hashmap中慢<br />
xpath是树结构查找，所以时间为log（n）级别，所以较慢，建议当文件不太大时可以考虑存储在本地进行存储<br />
注：IATA、ICAO为航空公司的二字码、三字码<br />
&nbsp;&nbsp; 源码下载：<a href="/Files/onedaylover/perfomance_dom4j.rar">http://www.blogjava.net/Files/onedaylover/perfomance_dom4j.rar</a><br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/onedaylover/aggbug/175195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/onedaylover/" target="_blank">如果有一天de</a> 2008-01-14 14:11 <a href="http://www.blogjava.net/onedaylover/articles/175195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>