﻿<?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-★yesjoy★-文章分类-java.util包 </title><link>http://www.blogjava.net/yesjoy/category/23522.html</link><description>&lt;font color="red"&gt;★&lt;/font&gt;&lt;font color="blue"&gt;总在爬山 所以艰辛;总在寻梦 所以苦痛&lt;/font&gt;&lt;font color="red"&gt;★&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 01 Sep 2010 08:54:44 GMT</lastBuildDate><pubDate>Wed, 01 Sep 2010 08:54:44 GMT</pubDate><ttl>60</ttl><item><title>Comparator用法总结</title><link>http://www.blogjava.net/yesjoy/articles/126046.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Mon, 25 Jun 2007 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/126046.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/126046.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/126046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/126046.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/126046.html</trackback:ping><description><![CDATA[<strong><font color=#333333>比较函数</font></strong><br><font color=#333333>TreeSet和TreeMap都按排序顺序存储元素。然而，精确定义采用何种&#8220;排序顺序&#8221;的是比较函数。通常在默认的情况下，这些类通过使用被Java称之为&#8220;自然顺序&#8221;的顺序存储它们的元素，而这种顺序通常也是你所需要的（A在B的前面，1在2的前面，等等）。如果需要用不同的方法对元素进行排序，可以在构造集合或映射时，指定一个Comparator对象。这样做为你提供了一种精确控制如何将元素储存到排序类集和映射中的能力。<br>　　<br>　　Comparator接口定义了两个方法：compare（ ）和equals（ ）。这里给出的compare（ ）方法按顺序比较了两个元素：<br>　　<br>　　int compare(Object obj1, Object obj2)<br>　　<br>　　obj1和obj2是被比较的两个对象。当两个对象相等时，该方法返回0；当obj1大于obj2时，返回一个正值；否则，返回一个负值。如果用于比较的对象的类型不兼容的话，该方法引发一个ClassCastException异常。通过覆盖compare（ ），可以改变对象排序的方式。例如，通过创建一个颠倒比较输出的比较函数，可以实现按逆向排序。<br>　　<br>　　这里给出的equals( )方法，测试一个对象是否与调用比较函数相等：<br>　　<br>　　boolean equals(Object obj)<br>　　<br>　　obj是被用来进行相等测试的对象。如果obj和调用对象都是Comparator的对象并且使用相同的排序。该方法返回true.否则返回false.重载equals（ ）方法是没有必要的，大多数简单的比较函数都不这样做。<br>　　<br>　　<strong>1 使用比较函数</strong><br>　　<br>　　下面是一个说明定制的比较函数能力的例子。该例子实现compare（ ）方法以便它按正常顺序的逆向进行操作。因此，它使得一个树集合按逆向的顺序进行存储。<br></font>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Use&nbsp;a&nbsp;custom&nbsp;comparator.</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Comparator;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">A&nbsp;reverse&nbsp;comparator&nbsp;for&nbsp;strings.</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_135_335_Open_Image onclick="this.style.display='none'; Codehighlighter1_135_335_Open_Text.style.display='none'; Codehighlighter1_135_335_Closed_Image.style.display='inline'; Codehighlighter1_135_335_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_135_335_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_135_335_Closed_Text.style.display='none'; Codehighlighter1_135_335_Open_Image.style.display='inline'; Codehighlighter1_135_335_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MyComp&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;Comparator&nbsp;</span><span id=Codehighlighter1_135_335_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_135_335_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_177_302_Open_Image onclick="this.style.display='none'; Codehighlighter1_177_302_Open_Text.style.display='none'; Codehighlighter1_177_302_Closed_Image.style.display='inline'; Codehighlighter1_177_302_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_177_302_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_177_302_Closed_Text.style.display='none'; Codehighlighter1_177_302_Open_Image.style.display='inline'; Codehighlighter1_177_302_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;compare(Object&nbsp;a,&nbsp;Object&nbsp;b)&nbsp;</span><span id=Codehighlighter1_177_302_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_177_302_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;aStr,&nbsp;bStr;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)&nbsp;a;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)&nbsp;b;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;reverse&nbsp;the&nbsp;comparison</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;bStr.compareTo(aStr);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;need&nbsp;to&nbsp;override&nbsp;equals</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Iterator;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.TreeSet;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_413_840_Open_Image onclick="this.style.display='none'; Codehighlighter1_413_840_Open_Text.style.display='none'; Codehighlighter1_413_840_Closed_Image.style.display='inline'; Codehighlighter1_413_840_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_413_840_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_413_840_Closed_Text.style.display='none'; Codehighlighter1_413_840_Open_Image.style.display='inline'; Codehighlighter1_413_840_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CompDemo&nbsp;</span><span id=Codehighlighter1_413_840_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_413_840_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_455_838_Open_Image onclick="this.style.display='none'; Codehighlighter1_455_838_Open_Text.style.display='none'; Codehighlighter1_455_838_Closed_Image.style.display='inline'; Codehighlighter1_455_838_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_455_838_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_455_838_Closed_Text.style.display='none'; Codehighlighter1_455_838_Open_Image.style.display='inline'; Codehighlighter1_455_838_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&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;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id=Codehighlighter1_455_838_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_455_838_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Create&nbsp;a&nbsp;tree&nbsp;set</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TreeSet&nbsp;ts&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TreeSet(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MyComp());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Add&nbsp;elements&nbsp;to&nbsp;the&nbsp;tree&nbsp;set</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">B</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">E</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">F</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">D</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Get&nbsp;an&nbsp;iterator</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ts.iterator();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;elements</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_741_811_Open_Image onclick="this.style.display='none'; Codehighlighter1_741_811_Open_Text.style.display='none'; Codehighlighter1_741_811_Closed_Image.style.display='inline'; Codehighlighter1_741_811_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_741_811_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_741_811_Closed_Text.style.display='none'; Codehighlighter1_741_811_Open_Image.style.display='inline'; Codehighlighter1_741_811_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(i.hasNext())&nbsp;</span><span id=Codehighlighter1_741_811_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_741_811_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;element&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(element&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<br><font color=#333333>正如下面的输出所示，树按照逆向顺序进行存储：<br>　　<br>　　F E D C B A<br>　　<br>　　仔细观察实现Comparator并覆盖compare（ ）方法的MyComp类（正如前面所解释的那样，覆盖equals（ ）方法既不是必须的，也不是常用的）。在compare（ ）方法内部，String方法compareTo（ ）比较两个字符串。然而由bStr？？不是aStr？？调用compareTo（ ）方法，这导致比较的结果被逆向。<br>　　<br>　　对应一个更实际的例子，下面的例子是用TreeMap程序实现前面介绍的存储账目资产平衡表例子的程序。在前面介绍的程序中，账目是按名进行排序的，但程序是以按照名字进行排序开始的。下面的程序按姓对账目进行排序。为了实现这种功能，程序使用了比较函数来比较每一个账目下姓的排序。得到的映射是按姓进行排序的。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Use&nbsp;a&nbsp;comparator&nbsp;to&nbsp;sort&nbsp;accounts&nbsp;by&nbsp;last&nbsp;name.</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Comparator;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Compare&nbsp;last&nbsp;whole&nbsp;words&nbsp;in&nbsp;two&nbsp;strings.</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_164_580_Open_Image onclick="this.style.display='none'; Codehighlighter1_164_580_Open_Text.style.display='none'; Codehighlighter1_164_580_Closed_Image.style.display='inline'; Codehighlighter1_164_580_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_164_580_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_580_Closed_Text.style.display='none'; Codehighlighter1_164_580_Open_Image.style.display='inline'; Codehighlighter1_164_580_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;TComp&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;Comparator&nbsp;</span><span id=Codehighlighter1_164_580_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_164_580_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_207_547_Open_Image onclick="this.style.display='none'; Codehighlighter1_207_547_Open_Text.style.display='none'; Codehighlighter1_207_547_Closed_Image.style.display='inline'; Codehighlighter1_207_547_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_207_547_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_207_547_Closed_Text.style.display='none'; Codehighlighter1_207_547_Open_Image.style.display='inline'; Codehighlighter1_207_547_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;compare(Object&nbsp;a,&nbsp;Object&nbsp;b)&nbsp;</span><span id=Codehighlighter1_207_547_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_207_547_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j,&nbsp;k;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;aStr,&nbsp;bStr;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)&nbsp;a;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)&nbsp;b;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;find&nbsp;index&nbsp;of&nbsp;beginning&nbsp;of&nbsp;last&nbsp;name</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;aStr.lastIndexOf(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bStr.lastIndexOf(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;aStr.substring(i).compareTo(bStr.substring(j));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;last&nbsp;names&nbsp;match,&nbsp;check&nbsp;entire&nbsp;name</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;aStr.compareTo(bStr);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;k;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;need&nbsp;to&nbsp;override&nbsp;equals</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Iterator;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Map;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Set;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.TreeMap;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_706_1599_Open_Image onclick="this.style.display='none'; Codehighlighter1_706_1599_Open_Text.style.display='none'; Codehighlighter1_706_1599_Closed_Image.style.display='inline'; Codehighlighter1_706_1599_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_706_1599_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_706_1599_Closed_Text.style.display='none'; Codehighlighter1_706_1599_Open_Image.style.display='inline'; Codehighlighter1_706_1599_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;TreeMapDemo2&nbsp;</span><span id=Codehighlighter1_706_1599_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_706_1599_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_748_1597_Open_Image onclick="this.style.display='none'; Codehighlighter1_748_1597_Open_Text.style.display='none'; Codehighlighter1_748_1597_Closed_Image.style.display='inline'; Codehighlighter1_748_1597_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_748_1597_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_748_1597_Closed_Text.style.display='none'; Codehighlighter1_748_1597_Open_Image.style.display='inline'; Codehighlighter1_748_1597_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&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;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id=Codehighlighter1_748_1597_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_748_1597_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Create&nbsp;a&nbsp;tree&nbsp;map</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TreeMap&nbsp;tm&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TreeMap(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TComp());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Put&nbsp;elements&nbsp;to&nbsp;the&nbsp;map</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">John&nbsp;Doe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Double(</span><span style="COLOR: #000000">3434.34</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Tom&nbsp;Smith</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Double(</span><span style="COLOR: #000000">123.22</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Jane&nbsp;Baker</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Double(</span><span style="COLOR: #000000">1378.00</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Todd&nbsp;Hall</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Double(</span><span style="COLOR: #000000">99.22</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Ralph&nbsp;Smith</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Double(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">19.08</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Get&nbsp;a&nbsp;set&nbsp;of&nbsp;the&nbsp;entries</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;set&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tm.entrySet();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Get&nbsp;an&nbsp;iterator</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;itr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;set.iterator();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;elements</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1218_1343_Open_Image onclick="this.style.display='none'; Codehighlighter1_1218_1343_Open_Text.style.display='none'; Codehighlighter1_1218_1343_Closed_Image.style.display='inline'; Codehighlighter1_1218_1343_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1218_1343_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1218_1343_Closed_Text.style.display='none'; Codehighlighter1_1218_1343_Open_Image.style.display='inline'; Codehighlighter1_1218_1343_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(itr.hasNext())&nbsp;</span><span id=Codehighlighter1_1218_1343_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_1218_1343_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map.Entry&nbsp;me&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Map.Entry)&nbsp;itr.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(me.getKey()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(me.getValue());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Deposit&nbsp;1000&nbsp;into&nbsp;John&nbsp;Doe's&nbsp;account</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;balance&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;((Double)&nbsp;tm.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">John&nbsp;Doe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)).doubleValue();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">John&nbsp;Doe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Double(balance&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">John&nbsp;Doe's&nbsp;new&nbsp;balance:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;tm.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">John&nbsp;Doe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>　　这里是程序的输出结果，注意此时的账目是按姓进行排序的：<br>　　<br>　　Jane Baker: 1378.0<br>　　<br>　　John Doe: 3434.34<br>　　<br>　　Todd Hall: 99.22<br>　　<br>　　Ralph Smith: -19.08<br>　　<br>　　Tom Smith: 123.22<br>　　<br>　　John Doe&#8217;s new balance: 4434.34<br>　　<br>　　比较函数类TComp比较两个包含姓和名的字符串。它首先比较姓。具体是这样做的，它首先寻找每一个字符串中最后一个空格的下标，然后比较从这个位置开始的每一个元素的子字符串。当两个字符串中姓完全相等时，它再比较两个名。这样就形成了一个先按姓进行排序，在姓相同的情况下，再按名字进行排序的树型映射。通过程序的输出中RalphSmith出现在Tom Smith之前的结果可以看到这一点。</font><br>参照：<a href="http://www.linuxmine.com/43849.html">http://www.linuxmine.com/43849.html</a>
<img src ="http://www.blogjava.net/yesjoy/aggbug/126046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2007-06-25 10:56 <a href="http://www.blogjava.net/yesjoy/articles/126046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.util包</title><link>http://www.blogjava.net/yesjoy/articles/126042.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Mon, 25 Jun 2007 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/126042.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/126042.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/126042.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/126042.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/126042.html</trackback:ping><description><![CDATA[转贴来自：<a href="http://blog.sina.com.cn/u/4a0469ac0100070g">http://blog.sina.com.cn/u/4a0469ac0100070g</a><br>本章介绍Java的实用工具类库java.util包。在这个包中，Java提供了一些实用的方法和数据结构。例如，Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间，提供随机数(Random)类产生各种类型的随机数，还提供了堆栈(Stack)、向量(Vector)&nbsp;、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。<br>　　图1.1给出了java.util包的基本层次结构图。下面我们将具体介绍其中几个重要的类。<br>　　　　　　　　　　　┌java.util.BitSet<br>　　　　　　　　　　　│java.util.Calendar<br>　　　　　　　　　　　│　　　　　　└java.util.GregorianCalendar<br>　　　　　　　　　　　│java.util.Date<br>　　　　　　　　　　　│java.util.Dictionary<br>　　　　　　　　　　　│　　　　　　└java.util.Hashtable<br>　　　　　　　　　　　│　　　　　　　　　　　　　└java.util.Properties<br>　　　　　　　　　　　│java.util.EventObject<br>　　　　　　　　　　　│java.util.ResourceBundle<br>　　　　　　　┌普通类┤　　　　　　├java.util.ListResourceBundle<br>　　　　　　　│　　　│　　　　　　└java.util.PropertyResourceBundle<br>　　　　　　　│　　　│java.util.Local<br>　　　　　　　│　　　│java.util.Observable<br>　　　　　　　│　　　│java.util.Random<br>　　　　　　　│　　　│java.util.StringTokenizer<br>　　　　　　　│　　　│java.util.Vector<br>　　　　　　　│　　　│　　　　　　└java.util.Stack<br>　　Java.util┤　　　└java.util.TimeZone<br>　　　　　　　│　　　　　　　　　　└java.util.SimpleTimeZone<br>　　　　　　　│　　　┌java.util.Enumeration<br>　　　　　　　├接　口┤java.util.EventListener<br>　　　　　　　│　　　└java.util.Observer<br>　　　　　　　│　　　┌java.util.EmptyStackException<br>　　　　　　　└异常类┤java.util.MissingResourceException<br>　　　　　　　　　　　│java.util.NoSuchElementException<br>　　　　　　　　　　　└java.util.TooManyListenersException<br>　　　　　　　图1.1&nbsp;java.util包的基本层次结构<br><br><br>1.2&nbsp;日期类Date<br><br>　　Java在日期类中封装了有关日期和时间的信息，用户可以通过调用相应的方法来获取系统时间或设置日期和时间。Date类中有很多方法在JDK1.0公布后已经过时了，在8.3中我们将介绍JDK1.0中新加的用于替代Date的功能的其它类。<br>　　在日期类中共定义了六种构造函数。<br>　　(1)public&nbsp;Date()<br>　　创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间。<br>　　例&nbsp;Date&nbsp;today=new&nbsp;Date()；//today被设置成创建时刻相对应的日期时间。<br>　　(2)public&nbsp;Date&nbsp;(long&nbsp;date)<br>　　long&nbsp;型的参数date可以通过调用Date类中的static方法parse(String&nbsp;s)来获得。<br>　　例&nbsp;long&nbsp;l=Date.parse("Mon&nbsp;6&nbsp;Jan&nbsp;1997&nbsp;13:3:00");<br>　　　　Date&nbsp;day=new&nbsp;Date(l);<br>　　//day中时间为1997年&nbsp;1月6号星期一，13:3:00。<br>　　(3)public&nbsp;Date(String&nbsp;s)<br>　　按字符串s产生一日期对象。s的格式与方法parse中字符串参数的模式相同。<br>　　例&nbsp;Date&nbsp;day=new&nbsp;Date("Mon&nbsp;6&nbsp;Jan&nbsp;1997&nbsp;13:3:00");<br>　　//day&nbsp;中时间为1997年1月6号星期一，13:3:00.<br>　　(4)public&nbsp;Date(int&nbsp;year,int&nbsp;month,int&nbsp;date)<br>　　(5)public&nbsp;Date(int&nbsp;year,int&nbsp;month,int&nbsp;date,int&nbsp;hrs,int&nbsp;min)<br>　　(6)public&nbsp;Date(int&nbsp;year,int&nbsp;month,int&nbsp;date,int&nbsp;hrs,int&nbsp;min,int&nbsp;sec)<br>　　按给定的参数创建一日期对象。<br>　　参数说明：<br>　　year的值为：需设定的年份-1900。例如需设定的年份是1997则year的值应为97，即1997-1900的结果。所以Date中可设定的年份最小为1900；<br>　　month的值域为0～11，0代表1月，11表代表12月；<br>　　date的值域在1～31之间；<br>　　hrs的值域在0～23之间。从午夜到次日凌晨1点间hrs=0，从中午到下午1点间hrs=12；<br>　　min和sec的值域在0～59之间。<br>　　例&nbsp;Date&nbsp;day=new&nbsp;Date(11,3,4);<br>　　//day中的时间为：04-Apr-11&nbsp;12:00:00&nbsp;AM<br>另外，还可以给出不正确的参数。<br>　　例　设定时间为1910年2月30日，它将被解释成3月2日。<br>　　Date&nbsp;day=new&nbsp;Date(10,1,30,10,12,34);<br>　　System.out.println("Day's&nbsp;date&nbsp;is:"+day);<br>　　//打印结果为：Day's&nbsp;date&nbsp;is:Web&nbsp;Mar&nbsp;02&nbsp;10:13:34&nbsp;GMT+08:00&nbsp;1910<br>　　下面我们给出一些Date类中常用方法。<br>　　(1)public&nbsp;static&nbsp;long&nbsp;UTC(int&nbsp;year,int&nbsp;month,int&nbsp;date,int&nbsp;hrs.&nbsp;int&nbsp;min,int&nbsp;sec)<br>　　该方法将利用给定参数计算UTC值。UTC是一种计时体制，与GMT(<a href="http://www.sogou.com/sogoupedia?query=%C2%B8%C3%B1%C3%81%C3%96%C3%8D%C3%BE%C3%96%C3%8E" target=_blank><font color=#000000><u>格林威治</u></font></a>时间)的计时体系略有差别。UTC计时体系是基于原子时钟的，而GTMT计时体系是基于天文学观测的。计算中使用的一般为GMT计时体系。<br>　　(2)public&nbsp;static&nbsp;long&nbsp;parse(String&nbsp;s)<br>　　该方法将字符串s转换成一个long型的日期。在介绍构造方法Date(long&nbsp;date)时曾使用过这个方法。<br>　　字符串s有一定的格式，一般为：<br>　　(星期&nbsp;日&nbsp;年&nbsp;时间GMT+时区)<br>　　若不注明时区，则为本地时区。<br>　　(3)public&nbsp;void&nbsp;setMonth(int&nbsp;month)<br>　　(4)public&nbsp;int&nbsp;getMonth()<br>　　这两个方法分别为设定和获取月份值。<br>　　获取的月份的值域为0～11，0代表1月，11代表12月。<br>　　(5)public&nbsp;String&nbsp;toString()<br>　　(6)public&nbsp;String&nbsp;toLocalString()<br>　　(7)public&nbsp;String&nbsp;toGMTString()<br>　　将给定日期对象转换成不同格式的字符串。它们对应的具体的格式可参看例子8.1。<br>　　(8)public&nbsp;int&nbsp;getTimezoneOffset()<br>　　该方法用于获取日期对象的时区偏移量。<br>　　例8.1中对上面介绍的Date类中的基本方法进行了具体的应用，并打印了相应的结果。由于使用了一些过时的方法，所以编译时会有警告信息。另外，由于本例中的时间表示与平台有关，不同的JDK版本对此处理不完全相同，因此不同版本的JDK执行本例的结果可能有细微差异。<br>　　例1.1&nbsp;DateApp.java<br>　　import&nbsp;java.lang.System;<br>　　import&nbsp;java.util.Date;<br>　　public&nbsp;class&nbsp;DateApp{<br>　　　public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[]){<br>　　　　Date&nbsp;today=new&nbsp;Date();<br>　　　　//today中的日期被设成创建时刻的日期和时间，假设创建时刻为1997年3月<br>　　　　//23日17时51分54秒。<br>　　　　System.out.println("Today's&nbsp;date&nbsp;is&nbsp;"+today);<br>　　　　//返回一般的时间表示法，本例中结果为<br>　　　　//Today's&nbsp;date&nbsp;is&nbsp;Fri&nbsp;May&nbsp;23&nbsp;17:51:54&nbsp;1997<br>　　　　System.out.println("Today's&nbsp;date(Internet&nbsp;GMT)is:"<br>　　　　　+today.toGMTString());<br>　　　　//返回结果为GMT时间表示法，本例中结果为<br>　　　　//Today's&nbsp;date(Internet&nbsp;GMT)is:&nbsp;23&nbsp;May&nbsp;1997&nbsp;09:51:54:GMT<br>　　　　System.out.println("Today's&nbsp;date(Locale)&nbsp;is:"<br>　　　　　+today.toLocaleString());<br>　　　　//返回结果为本地习惯的时间表示法，结果为<br>　　　　//Today's&nbsp;date(Locale)is:05/23/97&nbsp;17:51:54<br>　　　　System.out.println("Today's&nbsp;year&nbsp;is:&nbsp;"+today.getYear());<br>　　　　System.out.println("Today's&nbsp;month&nbsp;is:&nbsp;"+(today.getMonth()+1));<br>　　　　System.out.println("Today's&nbsp;date&nbsp;is:&nbsp;"+today.getDate());<br>　　　　//调用Date类中方法，获取年月日的值。<br>　　　　//下面调用了不同的构造方法来创建Date类的对象。<br>　　　　Date&nbsp;day1=new&nbsp;Date(100,1,23,10,12,34);<br>　　　　System.out.println("Day1's&nbsp;date&nbsp;is:&nbsp;"+day1);<br>　　　　Date&nbsp;day2=new&nbsp;Date("Sat&nbsp;12&nbsp;Aug&nbsp;1996&nbsp;13:3:00");<br>　　　　System.out.println("Day2's&nbsp;date&nbsp;is:&nbsp;"+day2);<br>　　　　long&nbsp;l=&nbsp;Date.parse("Sat&nbsp;5&nbsp;Aug&nbsp;1996&nbsp;13:3:00&nbsp;GMT+0800");<br>　　　　Date&nbsp;day3=&nbsp;new&nbsp;Date(l);<br>　　　　System.out.println("Day3's&nbsp;date(GMT)is:&nbsp;"+day3.toGMTString());<br>　　　　System.out.println("Day3's&nbsp;date(Locale)is:&nbsp;"<br>　　　　　+day3.toLocaleString());<br>　　　　System.out.println("Day3's&nbsp;time&nbsp;zone&nbsp;offset&nbsp;is:"<br>　　　　　+day3.getTimezoneOffset());<br>　　　}<br>　　}<br><br>　　运行结果(JDK1.3版，与原文不同，原文是JDK1.0版)：<br>　　E:\java\tutorial\java01&gt;java&nbsp;DateApp<br>　　Today's&nbsp;date&nbsp;is&nbsp;Thu&nbsp;Dec&nbsp;27&nbsp;17:58:16&nbsp;CST&nbsp;2001<br>　　Today's&nbsp;date(Internet&nbsp;GMT)is:27&nbsp;Dec&nbsp;2001&nbsp;09:58:16&nbsp;GMT<br>　　Today's&nbsp;date(Locale)&nbsp;is:2001-12-27&nbsp;17:58:16<br>　　Today's&nbsp;year&nbsp;is:&nbsp;101<br>　　Today's&nbsp;month&nbsp;is:&nbsp;12<br>　　Today's&nbsp;date&nbsp;is:&nbsp;27<br>　　Day1's&nbsp;date&nbsp;is:&nbsp;Wed&nbsp;Feb&nbsp;23&nbsp;10:12:34&nbsp;CST&nbsp;2000<br>　　Day2's&nbsp;date&nbsp;is:&nbsp;Fri&nbsp;Aug&nbsp;12&nbsp;13:03:00&nbsp;CST&nbsp;1996<br>　　Day3's&nbsp;date(GMT)is:&nbsp;5&nbsp;Aug&nbsp;1996&nbsp;05:03:00&nbsp;GMT<br>　　Day3's&nbsp;date(Locale)is:&nbsp;1996-8-5&nbsp;13:03:00<br>　　Day3's&nbsp;time&nbsp;zone&nbsp;offset&nbsp;is:-480<br><br>　　E:\java\tutorial\java01&gt;<br><br>1.3&nbsp;日历类Calendar<br><br>　　在早期的JDK版本中，日期(Date)类附有两大功能：(1)允许用年、月、日、时、分、秒来解释日期：(2)允许对表示日期的字符串进行格式化和句法分析。在JDK1.1中提供了类Calendar来完成第一种功能，类DateFormat来完成第二项功能。dateFormat是java.text包中的一个类。与Date类有所不同的是，DateFormat类接受用各种语言和不同习惯表示的日期字符串。本节将介绍java.util包中的类Calendar及其它新增加的相关的类。<br>　　类Calendar是一个抽象类，它完成日期(Date)类和普通日期表示法(即用一组整型域如YEAR，MONTH，DAY，HOUR表示日期)之间的转换。<br>　　由于所使用的规则不同，不同的日历系统对同一个日期的解释有所不同。在JDK1.1中提供了Calendar类一个子类GregorianCalendar??它实现了世界上普遍使用的公历系统。当然用户也可以通过继承Calendar类，并增加所需规则，以实现不同的日历系统。<br>　　第GregorianCalendar继承了Calendar类。本节将在介绍类GregorianCalendar的同时顺带介绍Calendar类中的相关方法。<br>　　类GregorianCalendar提供了七种构造函数：<br>　　(1)public&nbsp;GregorianCalendar()<br>　　创建的对象中的相关值被设置成指定时区，缺省地点的当前时间，即程序运行时所处的时区、地点的当前时间。<br>　　(2)public&nbsp;GregorianCalendar(TimeZone&nbsp;zone)<br>　　创建的对象中的相关值被设置成指定时区zone，缺省地点的当前时间。<br>　　(3)public&nbsp;GregorianCalendar(Locale&nbsp;aLocale)<br>　　创建的对象中的相关值被设置成缺省时区，指定地点aLocale的当前时间。<br>　　(4)public&nbsp;GregorianCalendar(TimeZone&nbsp;zone,Local&nbsp;aLocale)<br>　　创建的对象中的相关值被设置成指定时区，指定地点的当前时间。<br>　　上面使用到的类TimeZone的性质如下：<br>　　TimeZone是java.util包中的一个类，其中封装了有关时区的信息。每一个时区对应一组ID。类TimeZone提供了一些方法完成时区与对应ID两者之间的转换。<br>　　(Ⅰ)已知某个特定的ID，可以调用方法<br>　　public&nbsp;static&nbsp;synchronized&nbsp;TimeZone&nbsp;getTimeZone(String&nbsp;ID)<br>来获取对应的时区对象。<br>　　例&nbsp;太平洋时区的ID为PST，用下面的方法可获取对应于太平洋时区的时区对象：<br>　　TimeZone&nbsp;tz=TimeZone.getTimeZone("PST");<br>　　调用方法getDefault()可以获取主机所处时区的对象。<br>　　TimeZone&nbsp;tz=TimeZone.getDefault();<br>　　(Ⅱ)调用以下方法可以获取时区的ID<br>　　■public&nbsp;static&nbsp;synchronized&nbsp;String[]&nbsp;getavailableIDs(int&nbsp;rawOffset)<br>　　根据给定时区偏移值获取ID数组。同一时区的不同地区的ID可能不同，这是由于不同地区对是否实施夏时制意见不统一而造成的。<br>　　例String&nbsp;s[]=TimeZone.getAvailableIDs(-7*60*60*1000);<br>　　打印s，结果为s[0]=PNT，s[1]=MST<br>　　■public&nbsp;static&nbsp;synchronized&nbsp;String[]&nbsp;getAvailableIDs()<br>　　获取提供的所有支持的ID。<br>　　■public&nbsp;String&nbsp;getID()<br>　　获取特定时区对象的ID。<br>　　例&nbsp;TimeZone&nbsp;tz=TimeZone.getDefault();<br>　　String&nbsp;s=tz.getID();<br>　　打印s，结果为s=CTT。<br>　　上面使用类的对象代表了一个特定的地理、政治或文化区域。Locale只是一种机制，它用来标识一类对象，Local本身并不包含此类对象。<br>　　要获取一个Locale的对象有两种方法：<br>　　(Ⅰ)调用Locale类的构造方法<br>　　Locale(String&nbsp;language,String&nbsp;country)<br>　　Locale(String&nbsp;language,String&nbsp;country,String&nbsp;variant)<br>　　参数说明：language??在ISO-639中定义的代码，由两个小写字母组成。<br>　　　　　　　country??在ISO-3166中定义的代码，由两个大写字母组成。<br>　　　　　　　variant??售货商以及特定浏览器的代码，例如使用WIN代表Windows。<br>　　(Ⅱ)调用Locale类中定义的常量<br>　　Local类提供了大量的常量供用户创建Locale对象。<br>　　例&nbsp;Locale.CHINA<br>　　　　为中国创建一个Locale的对象。<br>　　类TimeZone和类Locale中的其它方法，读者可查阅API。<br>　　(5)public&nbsp;GregorianCalendar(int&nbsp;year,int&nbsp;month,int&nbsp;date)<br>　　(6)public&nbsp;GregorianCalendar(int&nbsp;year,int&nbsp;month,int&nbsp;date,int&nbsp;hour,int&nbsp;minute)<br>　　(7)public&nbsp;GregorianCalendar(int&nbsp;year,int&nbsp;month,int&nbsp;date,int&nbsp;hour,int&nbsp;minute,int&nbsp;second)<br>　　用给定的日期和时间创建一个GregorianCalendar的对象。<br>　　参数说明：<br>　　year-设定日历对象的变量YEAR；month-设定日历对象的变量MONTH；<br>　　date-设定日历对象的变量DATE；hour-设定日历对象的变量HOUR_OF_DAY；<br>　　minute-设定日历对象的变量MINUTE；second-设定日历对象的变量SECOND。<br>　　与Date类中不同的是year的值没有1900这个下限，而且year的值代表实际的年份。month的含义与Date类相同，0代表1月，11代表12月。<br>　　例&nbsp;GregorianCalendar&nbsp;cal=new&nbsp;GregorianCalendar(1991,2,4)<br>　　cal的日期为1991年3月4号。<br>　　除了与Date中类似的方法外，Calendar类还提供了有关方法对日历进行滚动计算和数学计算。计算规则由给定的日历系统决定。进行日期计算时，有时会遇到信息不足或信息不实等特殊情况。Calendar采取了相应的方法解决这些问题。当信息不足时将采用缺省设置，在GregorianCalendar类中缺省设置一般为YEAR=1970,MONTH=JANUARY,DATE=1。<br>　　当信息不实时，Calendar将按下面的次序优先选择相应的Calendar的变量组合，并将其它有冲突的信息丢弃。<br>　　MONTH+DAY_OF_MONTH<br>　　MONTH+WEEK_OF_MONTH+DAY_OF_WEEK<br>　　MONTH+DAY_OF_WEEK_OF_MONTH+DAY_OF_WEEK<br>　　DAY_OF+YEAR<br>　　DAY_OF_WEEK_WEEK_OF_YEAR<br>　　HOUR_OF_DAY<br><br>1.4&nbsp;随机数类Random<br><br>　　Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法Random()最大的不同之处，后者只产生double型的随机数。<br>　　类Random中的方法十分简单，它只有两个构造方法和六个普通方法。<br>　　构造方法：<br>　　(1)public&nbsp;Random()<br>　　(2)public&nbsp;Random(long&nbsp;seed)<br>　　Java产生随机数需要有一个基值seed，在第一种方法中基值缺省，则将系统时间作为seed。<br>　　普通方法：<br>　　(1)public&nbsp;synonronized&nbsp;void&nbsp;setSeed(long&nbsp;seed)<br>　　该方法是设定基值seed。<br>　　(2)public&nbsp;int&nbsp;nextInt()<br>　　该方法是产生一个整型随机数。<br>　　(3)public&nbsp;long&nbsp;nextLong()<br>　　该方法是产生一个long型随机数。<br>　　(4)public&nbsp;float&nbsp;nextFloat()<br>　　该方法是产生一个Float型随机数。<br>　　(5)public&nbsp;double&nbsp;nextDouble()<br>　　该方法是产生一个Double型随机数。<br>　　(6)public&nbsp;synchronized&nbsp;double&nbsp;nextGoussian()<br>　　该方法是产生一个double型的Goussian随机数。<br>　　例1.2&nbsp;RandomApp.java。<br>　　//import&nbsp;java.lang.*;<br>　　import&nbsp;java.util.Random;<br><br>　　public&nbsp;class&nbsp;RandomApp{<br>　　　public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[]){<br>　　　　Random&nbsp;ran1=new&nbsp;Random();<br>　　　　Random&nbsp;ran2=new&nbsp;Random(12345);<br>　　　　//创建了两个类Random的对象。<br>　　　　System.out.println("The&nbsp;1st&nbsp;set&nbsp;of&nbsp;random&nbsp;numbers:");<br>　　　　System.out.println("\t&nbsp;Integer:"+ran1.nextInt());<br>　　　　System.out.println("\t&nbsp;Long:"+ran1.nextLong());<br>　　　　System.out.println("\t&nbsp;Float:"+ran1.nextFloat());<br>　　　　System.out.println("\t&nbsp;Double:"+ran1.nextDouble());<br>　　　　System.out.println("\t&nbsp;Gaussian:"+ran1.nextGaussian());<br>　　　　//产生各种类型的随机数<br>　　　　System.out.print("The&nbsp;2nd&nbsp;set&nbsp;of&nbsp;random&nbsp;numbers:");<br>　　　　for(int&nbsp;i=0;i&lt;5;i++){<br>　　　　　System.out.println(ran2.nextInt()+"&nbsp;");<br>　　　　　if(i==2)&nbsp;System.out.println();<br>　　　　　//产生同种类型的不同的随机数。<br>　　　　　System.out.println();//原文如此<br>　　　　}<br>　　　}<br>　　}<br><br>　　运行结果：<br>　　E:\java01&gt;java&nbsp;RandomApp<br>　　The&nbsp;1st&nbsp;set&nbsp;of&nbsp;random&nbsp;numbers:<br>　　　　Integer:-173899656<br>　　　　Long:8056223819738127077<br>　　　　Float:0.6293638<br>　　　　Double:0.7888394520265607<br>　　　　Gaussian:0.5015701094568733<br>　　The&nbsp;2nd&nbsp;set&nbsp;of&nbsp;random&nbsp;numbers:1553932502<br>　　-2090749135<br>　　-287790814<br>　　-355989640<br>　　-716867186<br>　　E:\java01&gt;<br>
<div>1.5&nbsp;向量类Vector<br><br>　　Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中。正如在一开始就提到过，是没有指针概念的，但如果能正确灵活地使用指针又确实可以大大提高程序的质量，比如在C、C++中所谓&#8220;动态数组&#8221;一般都由指针来实现。为了弥补这点缺陷，Java提供了丰富的类库来方便编程者使用，Vector类便是其中之一。事实上，灵活使用数组也可完成向量类的功能，但向量类中提供的大量方法大大方便了用户的使用。<br>　　创建了一个向量类的对象后，可以往其中随意地插入不同的类的对象，既不需顾及类型也不需预先选定向量的容量，并可方便地进行查找。对于预先不知或不愿预先定义数组大小，并需频繁进行查找、插入和删除工作的情况，可以考虑使用向量类。<br>　　向量类提供了三种构造方法：<br>　　public&nbsp;vector()<br>　　public&nbsp;vector(int&nbsp;initialcapacity,int&nbsp;capacityIncrement)<br>　　public&nbsp;vector(int&nbsp;initialcapacity)<br>　　使用第一种方法，系统会自动对向量对象进行管理。若使用后两种方法，则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小)，当真正存放的数据个数超过容量时，系统会扩充向量对象的存储容量。参数capacityIncrement给定了每次扩充的扩充值。当capacityIncrement为0时，则每次扩充一倍。利用这个功能可以优化存储。<br>　　在Vector类中提供了各种方法方便用户使用：<br>　　■插入功能<br>　　(1)public&nbsp;final&nbsp;synchronized&nbsp;void&nbsp;addElement(Object&nbsp;obj)<br>　　将obj插入向量的尾部。obj可以是任何类的对象。对同一个向量对象，可在其中插入不同类的对象。但插入的应是对象而不是数值，所以插入数值时要注意将数值转换成相应的对象。<br>　　例&nbsp;要插入一个整数1时，不要直接调用v1.addElement(1)，正确的方法为：<br>　　Vector&nbsp;v1=new&nbsp;Vector();<br>　　Integer&nbsp;integer1=new&nbsp;Integer(1);<br>　　v1.addElement(integer1);<br>　　(2)public&nbsp;final&nbsp;synchronized&nbsp;void&nbsp;setElementAt(object&nbsp;obj,int&nbsp;index)<br>　　将index处的对象设成obj，原来的对象将被覆盖。<br>　　(3)public&nbsp;final&nbsp;synchronized&nbsp;void&nbsp;insertElementAt(Object&nbsp;obj,int&nbsp;index)<br>　　在index指定的位置插入obj，原来对象以及此后的对象依次往后顺延。<br>　　■删除功能<br>　　(1)public&nbsp;final&nbsp;synchronized&nbsp;void&nbsp;removeElement(Object&nbsp;obj)<br>　　从向量中删除obj。若有多个存在，则从向量头开始试，删除找到的第一个与obj相同的向量成员。<br>　　(2)public&nbsp;final&nbsp;synchronized&nbsp;void&nbsp;removeAllElement()<br>　　删除向量中所有的对象。<br>　　(3)public&nbsp;final&nbsp;synchronized&nbsp;void&nbsp;removeElementlAt(int&nbsp;index)<br>　　删除index所指的地方的对象。<br>　　■查询搜索功能<br>　　(1)public&nbsp;final&nbsp;int&nbsp;indexOf(Object&nbsp;obj)<br>　　从向量头开始搜索obj&nbsp;,返回所遇到的第一个obj对应的下标，若不存在此obj，返回-1。<br>　　(2)public&nbsp;final&nbsp;synchronized&nbsp;int&nbsp;indexOf(Object&nbsp;obj,int&nbsp;index)<br>　　从index所表示的下标处开始搜索obj。<br>　　(3)public&nbsp;final&nbsp;int&nbsp;lastIndexOf(Object&nbsp;obj)<br>　　从向量尾部开始逆向搜索obj。<br>　　(4)public&nbsp;final&nbsp;synchronized&nbsp;int&nbsp;lastIndexOf(Object&nbsp;obj,int&nbsp;index)<br>　　从index所表示的下标处由尾至头逆向搜索obj。<br>　　(5)public&nbsp;final&nbsp;synchronized&nbsp;Object&nbsp;firstElement()<br>　　获取向量对象中的首个obj。<br>　　(6)public&nbsp;final&nbsp;synchronized&nbsp;Object&nbsp;lastelement()<br>　　获取向量对象中的最后一个obj。<br>　　了解了向量的最基本的方法后，我们来看一下例8.3VectorApp.java。<br>　　例1.3&nbsp;VectorApp.java。<br>　　import&nbsp;java.util.Vector;<br>　　import&nbsp;java.lang.*;//这一句不应该要，但原文如此<br>　　import&nbsp;java.util.Enumeration;<br>　　public&nbsp;class&nbsp;VectorApp{<br>　　　public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args){<br>　　　　Vector&nbsp;v1=new&nbsp;Vector();<br>　　　　Integer&nbsp;integer1=new&nbsp;Integer(1);<br>　　　　v1.addElement("one");<br>　　　　//加入的为字符串对象<br>　　　　v1.addElement(integer1);<br>　　　　v1.addElement(integer1);<br>　　　　//加入的为Integer的对象<br>　　　　v1.addElement("two");<br>　　　　v1.addElement(new&nbsp;Integer(2));<br>　　　　v1.addElement(integer1);<br>　　　　v1.addElement(integer1);<br>　　　　System.out.println("The&nbsp;vector&nbsp;v1&nbsp;is:\n\t"+v1);<br>　　　　//将v1转换成字符串并打印<br>　　　　v1.insertElementAt("three",2);<br>　　　　v1.insertElementAt(new&nbsp;Float(3.9),3);<br>　　　　System.out.println("The&nbsp;vector&nbsp;v1(used&nbsp;method&nbsp;insertElementAt())&nbsp;is:\n\t&nbsp;"+v1);<br>　　　　//往指定位置插入新的对象，指定位置后的对象依次往后顺延<br>　　　　v1.setElementAt("four",2);<br>　　　　System.out.println("The&nbsp;vector&nbsp;v1(used&nbsp;method&nbsp;setElementAt())&nbsp;is:\n\t&nbsp;"+v1);<br>　　　　//将指定位置的对象设置为新的对象<br>　　　　v1.removeElement(integer1);<br>　　　　//从向量对象v1中删除对象integer1由于存在多个integer1所以从头开始<br>　　　　//找，删除找到的第一个integer1<br>　　　　Enumeration&nbsp;enum=v1.elements();<br>　　　　System.out.print("The&nbsp;vector&nbsp;v1(used&nbsp;method&nbsp;removeElement())is:");<br>　　　　while(enum.hasMoreElements())<br>　　　　System.out.print(enum.nextElement()+"&nbsp;");<br>　　　　System.out.println();<br>　　　　//使用枚举类(Enumeration)的方法来获取向量对象的每个元素<br>　　　　System.out.println("The&nbsp;position&nbsp;of&nbsp;object&nbsp;1(top-to-bottom):"<br>　　　　　+&nbsp;v1.indexOf(integer1));<br>　　　　System.out.println("The&nbsp;position&nbsp;of&nbsp;object&nbsp;1(tottom-to-top):"<br>　　　　　+v1.lastIndexOf(integer1));<br>　　　　//按不同的方向查找对象integer1所处的位置<br>　　　　v1.setSize(4);<br>　　　　System.out.println("The&nbsp;new&nbsp;vector(resized&nbsp;the&nbsp;vector)is:"+v1);<br>　　　　//重新设置v1的大小，多余的元素被行弃<br>　　　}<br>　　}<br>　　运行结果：<br>　　E:\java01&gt;java&nbsp;VectorApp<br>　　The&nbsp;vector&nbsp;v1&nbsp;is:<br>　　　　　[one,&nbsp;1,&nbsp;1,&nbsp;two,&nbsp;2,&nbsp;1,&nbsp;1]<br>　　The&nbsp;vector&nbsp;v1(used&nbsp;method&nbsp;insertElementAt())&nbsp;is:<br>　　　　　[one,&nbsp;1,&nbsp;three,&nbsp;3.9,&nbsp;1,&nbsp;two,&nbsp;2,&nbsp;1,&nbsp;1]<br>　　The&nbsp;vector&nbsp;v1(used&nbsp;method&nbsp;setElementAt())&nbsp;is:<br>　　　　　[one,&nbsp;1,&nbsp;four,&nbsp;3.9,&nbsp;1,&nbsp;two,&nbsp;2,&nbsp;1,&nbsp;1]<br>　　The&nbsp;vector&nbsp;v1(used&nbsp;method&nbsp;removeElement())is:one&nbsp;four&nbsp;3.9&nbsp;1&nbsp;two&nbsp;2&nbsp;1&nbsp;1<br>　　The&nbsp;position&nbsp;of&nbsp;object&nbsp;1(top-to-bottom):3<br>　　The&nbsp;position&nbsp;of&nbsp;object&nbsp;1(tottom-to-top):7<br>　　The&nbsp;new&nbsp;vector(resized&nbsp;the&nbsp;vector)is:[one,&nbsp;four,&nbsp;3.9,&nbsp;1]<br>　　E:\java01&gt;<br>　　从例1.3运行的结果中可以清楚地了解上面各种方法的作用，另外还有几点需解释。<br>　　(1)类Vector定义了方法<br>　　public&nbsp;final&nbsp;int&nbsp;size()<br>　　此方法用于获取向量元素的个数。它的返回值是向是中实际存在的元素个数，而非向量容量。可以调用方法capactly()来获取容量值。<br>　　方法：<br>　　public&nbsp;final&nbsp;synchronized&nbsp;void&nbsp;setsize(int&nbsp;newsize)<br>　　此方法用来定义向量大小。若向量对象现有成员个数已超过了newsize的值，则超过部分的多余元素会丢失。<br>　　(2)程序中定义了Enumeration类的一个对象<br>　　Enumeration是java.util中的一个接口类，在Enumeration中封装了有关枚举数据集合的方法。<br>　　在Enumeration中提供了方法hawMoreElement()来判断集合中是束还有其它元素和方法nextElement()来获取下一个元素。利用这两个方法可以依次获得集合中元素。<br>　　Vector中提供方法：<br>　　public&nbsp;final&nbsp;synchronized&nbsp;Enumeration&nbsp;elements()<br>　　此方法将向量对象对应到一个枚举类型。java.util包中的其它类中也大都有这类方法，以便于用户获取对应的枚举类型。<br><br>1.6&nbsp;栈类Stack<br><br>　　Stack类是Vector类的子类。它向用户提供了堆栈这种高级的数据结构。栈的基本特性就是先进后出。即先放入栈中的元素将后被推出。Stack类中提供了相应方法完成栈的有关操作。<br>　　基本方法：<br>　　public&nbsp;Object&nbsp;push(Object&nbsp;Hem)<br>　　将Hem压入栈中，Hem可以是任何类的对象。<br>　　public&nbsp;Object&nbsp;pop()<br>　　弹出一个对象。<br>　　public&nbsp;Object&nbsp;peek()<br>　　返回栈顶元素，但不弹出此元素。<br>　　public&nbsp;int&nbsp;search(Object&nbsp;obj)<br>　　搜索对象obj,返回它所处的位置。<br>　　public&nbsp;boolean&nbsp;empty()<br>　　判别栈是否为空。<br>　　例1.4&nbsp;StackApp.java使用了上面的各种方法。<br>　　例1.4&nbsp;StackApp.java。<br>　　import&nbsp;java.lang.*;<br>　　import&nbsp;java.util.*;<br>　　public&nbsp;class&nbsp;StackApp{<br>　　　public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[]){<br>　　　　Stack&nbsp;sta=new&nbsp;Stack();<br>　　　　sta.push("Apple");<br>　　　　sta.push("banana");<br>　　　　sta.push("Cherry");<br>　　　　//压入的为字符串对象<br>　　　　sta.push(new&nbsp;Integer(2));<br>　　　　//压入的为Integer的对象，值为2<br>　　　　sta.push(new&nbsp;Float(3.5));<br>　　　　//压入的为Float的对象，值为3.5<br>　　　　System.out.println("The&nbsp;stack&nbsp;is,"+sta);<br>　　　　//对应栈sta<br>　　　　System.out.println("The&nbsp;top&nbsp;of&nbsp;stack&nbsp;is:"+sta.peek());<br>　　　　//对应栈顶元素，但不将此元素弹出<br>　　　　System.out.println("The&nbsp;position&nbsp;of&nbsp;object&nbsp;Cherry&nbsp;is:"<br>　　　　+sta.search("cherry"));<br>　　　　//打印对象Cherry所处的位置<br>　　　　System.out.print("Pop&nbsp;the&nbsp;element&nbsp;of&nbsp;the&nbsp;stack:");<br>　　　　while(!sta.empty())<br>　　　　System.out.print(sta.pop()+"&nbsp;");<br>　　　　System.out.println();<br>　　　　//将栈中的元素依次弹出并打印。与第一次打印的sta的结果比较，可看出栈<br>　　　　//先进后出的特点<br>　　　}<br>　　}<br>　　运行结果(略)</div>
<img src ="http://www.blogjava.net/yesjoy/aggbug/126042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2007-06-25 10:30 <a href="http://www.blogjava.net/yesjoy/articles/126042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>