﻿<?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-记忆好很大程度决定能力!-文章分类-j2se</title><link>http://www.blogjava.net/microlab4321/category/24780.html</link><description>适时总结是一种很好的彌补方法!</description><language>zh-cn</language><lastBuildDate>Wed, 05 Sep 2007 17:20:48 GMT</lastBuildDate><pubDate>Wed, 05 Sep 2007 17:20:48 GMT</pubDate><ttl>60</ttl><item><title>(摘)java基础(四)：Java同步机制 </title><link>http://www.blogjava.net/microlab4321/articles/142954.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Wed, 05 Sep 2007 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/142954.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/142954.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/142954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/142954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/142954.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">出处:http://www.blogjava.net/crazycy/archive/2006/10/14/75085.html<br />
方式有四种：①</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">ThreadLocal</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">②</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">synchronized(</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">)</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">③</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">wait() </span><span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">与</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">notify()</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">④</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">volatile<br />
<br />
</span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">目的：都是为了解决多线程中的对同一变量的访问冲突<br />
</span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana"><br />
<font style="background-color: #a52a2a">ThreadLocal</font> <br />
&nbsp;&nbsp;&nbsp; .</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈠</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">ThreadLocal</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">保证不同线程拥有不同实例，相同线程一定拥有相同的实例，即为每一个使用该变量的线程提供一个该变量值的副本，每一个线程都可以独立改变自己的副本，而不是与其它线程的副本冲突。</span> </p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">.</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈡优势：提供了线程安全的共享对象</span> </p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">.</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈢与其它同步机制的区别：同步机制是为了同步多个线程对相同资源的并发访问，是为了多个线程之间进行通信；而</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">ThreadLocal</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">是隔离多个线程的数据共享，从根本上就不在多个线程之间共享资源，这样当然不需要多个线程进行同步了。</span> </p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">.</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈣使用技巧：需要多个线程之间进行通信：使用同步机制；如果需要隔离多个线程之间的共享冲突：推荐使用</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">ThreadLocal</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">（线程安全）</span> <br />
<span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana"><br />
<span style="font-size: 10pt; color: black; font-family: Verdana"><font style="background-color: #a52a2a">volatile</font> </span><br />
<span style="font-size: 10pt; color: black; font-family: Verdana">&nbsp;&nbsp;&nbsp; .<span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈠</span>volatile</span> <span style="font-size: 10pt; color: black; font-family: 宋体">修饰的成员变量在每次被线程访问时，都强迫从共享内存中重读该成员变量的值。而且，当成员变量发生变化时，强迫线程将变化值回写到共享内存。<br />
<span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">.</span><span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈡优势：</span>这样在任何时刻，两个不同的线程总是看到某个成员变量的同一个值。</span> <span style="font-size: 10pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">.</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈢缘由：</span>Java</span> <span style="font-size: 10pt; color: black; font-family: 宋体">语言规范中指出：为了获得最佳速度，允许线程保存共享成员变量的私有拷贝，而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: black; font-family: 宋体">这样当多个线程同时与某个对象交互时，就必须要注意到要让线程及时的得到共享成员变量的变化。</span> <span style="font-size: 10pt; color: black; font-family: 宋体"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而</span> <span style="font-size: 10pt; color: black; font-family: Verdana">volatile</span> <span style="font-size: 10pt; color: black; font-family: 宋体">关键字就是提示</span> <span style="font-size: 10pt; color: black; font-family: Verdana">VM</span> <span style="font-size: 10pt; color: black; font-family: 宋体">：对于这个成员变量不能保存它的私有拷贝，而应直接与共享成员变量交互。</span> <span style="font-size: 10pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体"><span style="font-size: 10pt; color: black; line-height: 150%; font-family: Verdana">.</span> <span style="font-size: 10pt; color: black; line-height: 150%; font-family: 宋体">㈣使用技巧：</span>在两个或者更多的线程访问的成员变量上使用</span> <span style="font-size: 10pt; color: black; font-family: Verdana">volatile</span> <span style="font-size: 10pt; color: black; font-family: 宋体">。当要访问的变量已在</span> <span style="font-size: 10pt; color: black; font-family: Verdana">synchronized</span> <span style="font-size: 10pt; color: black; font-family: 宋体">代码块中，或者为常量时，不必使用。</span> <span style="font-size: 10pt; color: black; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: black; font-family: 宋体">由于使用</span> <span style="font-size: 10pt; color: black; font-family: Verdana">volatile</span> <span style="font-size: 10pt; color: black; font-family: 宋体">屏蔽掉了</span> <span style="font-size: 10pt; color: black; font-family: Verdana">VM</span> <span style="font-size: 10pt; color: black; font-family: 宋体">中必要的代码优化，所以在效率上比较低，因此一定在必要时才使用此关键字。<br />
<br />
<span style="font-size: 10pt; color: black; font-family: 宋体"><font style="background-color: #a52a2a">阐释</font>：<br />
线程为了提高效率，将某成员变量</span><span style="font-size: 10pt; color: black; font-family: Verdana">(</span><span style="font-size: 10pt; color: black; font-family: 宋体">如</span><span style="font-size: 10pt; color: black; font-family: Verdana">A)</span><span style="font-size: 10pt; color: black; font-family: 宋体">拷贝了一份（如</span><span style="font-size: 10pt; color: black; font-family: Verdana">B</span><span style="font-size: 10pt; color: black; font-family: 宋体">），线程中对</span><span style="font-size: 10pt; color: black; font-family: Verdana">A</span><span style="font-size: 10pt; color: black; font-family: 宋体">的访问其实访问的是</span><span style="font-size: 10pt; color: black; font-family: Verdana">B</span><span style="font-size: 10pt; color: black; font-family: 宋体">。</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br clear="all" />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">只在某些动作时才进行</span><span style="font-size: 10pt; color: black; font-family: Verdana">A</span><span style="font-size: 10pt; color: black; font-family: 宋体">和</span><span style="font-size: 10pt; color: black; font-family: Verdana">B</span><span style="font-size: 10pt; color: black; font-family: 宋体">的同步，因此存在</span><span style="font-size: 10pt; color: black; font-family: Verdana">A</span><span style="font-size: 10pt; color: black; font-family: 宋体">和</span><span style="font-size: 10pt; color: black; font-family: Verdana">B</span><span style="font-size: 10pt; color: black; font-family: 宋体">不一致的情况。</span><span style="font-size: 10pt; color: black; font-family: Verdana">volatile</span><span style="font-size: 10pt; color: black; font-family: 宋体">就是用来避免这种情况的。</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br clear="all" />
volatile</span><span style="font-size: 10pt; color: black; font-family: 宋体">告诉</span><span style="font-size: 10pt; color: black; font-family: Verdana">jvm</span><span style="font-size: 10pt; color: black; font-family: 宋体">，</span><span style="font-size: 10pt; color: black; font-family: 宋体">它所修饰的变量不保留拷贝，直接访问主内存中的（也就是上面说的</span><span style="font-size: 10pt; color: black; font-family: Verdana">A)<br />
<br />
<font style="background-color: #800080">sleep()&nbsp; vs&nbsp;wait()</font>&nbsp;<span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;sleep是线程类（Thread）的方法，导致此线程暂停执行指定时间，把执行机会给其他线程，但是监控状态依然保持，到时后会自动恢复。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用sleep不会释放对象锁。<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;wait是Object类的方法，对此对象调用wait方法导致本线程放弃对象锁，进入等待此对象的等待锁定池，只有针对此对象发出notify方法（或notifyAll）后本线程才 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 进入对象锁定池准备获得对象锁进入运行状态。<br />
<br />
<br />
<br />
<br />
===================2007-05-01引用如下内容===========<br />
</p>
<div><a id="viewpost1_TitleUrl" href="http://www.cnblogs.com/simpleobject/archive/2005/09/14/236941.html"><font color="#000080">[转]ThreadLocal的设计与使用</font></a> </div>
<div>早在Java 1.2推出之时，Java平台中就引入了一个新的支持：java.lang.ThreadLocal，给我们在编写多线程程序时提供了一种新的选择。使用这个工具类可以很简洁地编写出优美的多线程程序，虽然ThreadLocal非常有用，但是似乎现在了解它、使用它的朋友还不多。 <br />
<br />
　　<strong>ThreadLocal是什么</strong><br />
<br />
　　ThreadLocal是什么呢？其实ThreadLocal并非是一个线程的本地实现版本，它并不是一个Thread，而是thread local variable（线程局部变量）。也许把它命名为ThreadLocalVar更加合适。线程局部变量（ThreadLocal）其实的功用非常简单，就是为每一个使用该变量的线程都提供一个变量值的副本，是每一个线程都可以独立地改变自己的副本，而不会和其它线程的副本冲突。从线程的角度看，就好像每一个线程都完全拥有该变量。线程局部变量并不是Java的新发明，在其它的一些语言编译器实现（如IBM XL FORTRAN）中，它在语言的层次提供了直接的支持。因为Java中没有提供在语言层次的直接支持，而是提供了一个ThreadLocal的类来提供支持，所以，在Java中编写线程局部变量的代码相对比较笨拙，这也许是线程局部变量没有在Java中得到很好的普及的一个原因吧。<br />
<br />
　　<strong>ThreadLocal的设计</strong><br />
<br />
　　首先看看ThreadLocal的接口：<br />
<br />
　　Object get() ; // 返回当前线程的线程局部变量副本 protected Object initialValue(); // 返回该线程局部变量的当前线程的初始值void set(Object value); // 设置当前线程的线程局部变量副本的值<br />
<br />
　　ThreadLocal有3个方法，其中值得注意的是initialValue()，该方法是一个protected的方法，显然是为了子类重写而特意实现的。该方法返回当前线程在该线程局部变量的初始值，这个方法是一个延迟调用方法，在一个线程第1次调用get()或者set(Object)时才执行，并且仅执行1次。ThreadLocal中的确实实现直接返回一个null：<br />
<br />
</font>
<table width="100%" bgcolor="#ffffff">
    <tbody>
        <tr>
            <td><font color="#a52a2a">protected Object initialValue() { return null; }</font></td>
        </tr>
    </tbody>
</table>
<br />
<font color="#a52a2a">　　ThreadLocal是如何做到为每一个线程维护变量的副本的呢？其实实现的思路很简单，在ThreadLocal类中有一个Map，用于存储每一个线程的变量的副本。比如下面的示例实现：<br />
<br />
</font>
<table width="100%" bgcolor="#ffffff">
    <tbody>
        <tr>
            <td><font color="#a52a2a">public class ThreadLocal<br />
            {<br />
            　private Map values = Collections.synchronizedMap(new HashMap());<br />
            　public Object get()<br />
            　{<br />
            　　Thread curThread = Thread.currentThread(); <br />
            　　Object o = values.get(curThread); <br />
            　　if (o == null &amp;&amp; !values.containsKey(curThread))<br />
            　　{<br />
            　　　o = initialValue();<br />
            　　　values.put(curThread, o); <br />
            　　}<br />
            　　return o; <br />
            　}<br />
            <br />
            　public void set(Object newValue)<br />
            　{<br />
            　　values.put(Thread.currentThread(), newValue);<br />
            　}<br />
            <br />
            　public Object initialValue()<br />
            　{<br />
            　　return null; <br />
            　}<br />
            }</font></td>
        </tr>
    </tbody>
</table>
<br />
<font color="#a52a2a">　　当然，这并不是一个工业强度的实现，但JDK中的ThreadLocal的实现总体思路也类似于此。<br />
<br />
　　<strong>ThreadLocal的使用</strong><br />
<br />
　　如果希望线程局部变量初始化其它值，那么需要自己实现ThreadLocal的子类并重写该方法，通常使用一个内部匿名类对ThreadLocal进行子类化，比如下面的例子，SerialNum类为每一个类分配一个序号：<br />
<br />
</font>
<table width="100%" bgcolor="#ffffff">
    <tbody>
        <tr>
            <td><font color="#a52a2a">public class SerialNum <br />
            {<br />
            　// The next serial number to be assigned<br />
            <br />
            　private static int nextSerialNum = 0; <br />
            　private static ThreadLocal serialNum = new ThreadLocal() <br />
            　{<br />
            　　protected synchronized Object initialValue() <br />
            　　{<br />
            　　　return new Integer(nextSerialNum++);<br />
            　　}<br />
            　};<br />
            <br />
            　public static int get() <br />
            　{<br />
            　　return ((Integer) (serialNum.get())).intValue(); <br />
            　}<br />
            }</font></td>
        </tr>
    </tbody>
</table>
<br />
<font color="#a52a2a">　　SerialNum类的使用将非常地简单，因为get()方法是static的，所以在需要获取当前线程的序号时，简单地调用：<br />
<br />
</font>
<table width="100%" bgcolor="#ffffff">
    <tbody>
        <tr>
            <td><font color="#a52a2a">int serial = SerialNum.get();</font></td>
        </tr>
    </tbody>
</table>
<br />
<font color="#a52a2a">　　即可。<br />
<br />
　　在线程是活动的并且ThreadLocal对象是可访问的时，该线程就持有一个到该线程局部变量副本的隐含引用，当该线程运行结束后，该线程拥有的所以线程局部变量的副本都将失效，并等待垃圾收集器收集。<br />
<br />
　　<strong>ThreadLocal与其它同步机制的比较</strong><br />
<br />
　　ThreadLocal和其它同步机制相比有什么优势呢？ThreadLocal和其它所有的同步机制都是为了解决多线程中的对同一变量的访问冲突，在普通的同步机制中，是通过对象加锁来实现多个线程对同一变量的安全访问的。这时该变量是多个线程共享的，使用这种同步机制需要很细致地分析在什么时候对变量进行读写，什么时候需要锁定某个对象，什么时候释放该对象的锁等等很多。所有这些都是因为多个线程共享了资源造成的。ThreadLocal就从另一个角度来解决多线程的并发访问，ThreadLocal会为每一个线程维护一个和该线程绑定的变量的副本，从而隔离了多个线程的数据，每一个线程都拥有自己的变量副本，从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象，在编写多线程代码时，可以把不安全的整个变量封装进ThreadLocal，或者把该对象的特定于线程的状态封装进ThreadLocal。<br />
<br />
　　由于ThreadLocal中可以持有任何类型的对象，所以使用ThreadLocal get当前线程的值是需要进行强制类型转换。但随着新的Java版本（1.5）将模版的引入，新的支持模版参数的ThreadLocal&lt;T&gt;类将从中受益。也可以减少强制类型转换，并将一些错误检查提前到了编译期，将一定程度地简化ThreadLocal的使用。<br />
<br />
　　<strong>总结</strong><br />
<br />
　　当然ThreadLocal并不能替代同步机制，两者面向的问题领域不同。同步机制是为了同步多个线程对相同资源的并发访问，是为了多个线程之间进行通信的有效方式；而ThreadLocal是隔离多个线程的数据共享，从根本上就不在多个线程之间共享资源（变量），这样当然不需要对多个线程进行同步了。所以，如果你需要进行多个线程之间进行通信，则使用同步机制；如果需要隔离多个线程之间的共享冲突，可以使用ThreadLocal，这将极大地简化你的程序，使程序更加易读、简洁。<br />
</font></span></span></span></span></div>
<img src ="http://www.blogjava.net/microlab4321/aggbug/142954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-09-05 17:24 <a href="http://www.blogjava.net/microlab4321/articles/142954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>摘JAVA基础(三)：for循环 </title><link>http://www.blogjava.net/microlab4321/articles/142696.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Tue, 04 Sep 2007 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/142696.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/142696.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/142696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/142696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/142696.html</trackback:ping><description><![CDATA[<div class="postTitle"><a id="viewpost1_TitleUrl" href="http://www.blogjava.net/crazycy/archive/2006/10/13/74889.html">JAVA基础(三)：for循环</a> </div>
<div class="postText">for（expr1; expr2; expr3）的执行顺序：<br />
----初始化工作的expr1;&nbsp;&nbsp;&nbsp;&nbsp;<br />
----判断expr2是否为真<br />
<br />
如果为真<br />
-----执行for体<br />
-----执行expr3<br />
-----判断expr2是否为真<br />
循环之<br />
<br />
如果为假<br />
-----不执行for体<br />
-----不执行expr3<br />
<br />
示例：<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"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_26_381_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_381_Open_Text.style.display='none'; Codehighlighter1_26_381_Closed_Image.style.display='inline'; Codehighlighter1_26_381_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_26_381_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_26_381_Closed_Text.style.display='none'; Codehighlighter1_26_381_Open_Image.style.display='inline'; Codehighlighter1_26_381_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;Delta&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_26_381_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"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_26_381_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_71_144_Open_Image" onclick="this.style.display='none'; Codehighlighter1_71_144_Open_Text.style.display='none'; Codehighlighter1_71_144_Closed_Image.style.display='inline'; Codehighlighter1_71_144_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_71_144_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_71_144_Closed_Text.style.display='none'; Codehighlighter1_71_144_Open_Image.style.display='inline'; Codehighlighter1_71_144_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;foo(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;c)&nbsp;&nbsp;</span><span id="Codehighlighter1_71_144_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"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_71_144_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(c);&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_202_376_Open_Image" onclick="this.style.display='none'; Codehighlighter1_202_376_Open_Text.style.display='none'; Codehighlighter1_202_376_Closed_Image.style.display='inline'; Codehighlighter1_202_376_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_202_376_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_202_376_Closed_Text.style.display='none'; Codehighlighter1_202_376_Open_Image.style.display='inline'; Codehighlighter1_202_376_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;main(String[]&nbsp;&nbsp;&nbsp;argv)&nbsp;</span><span id="Codehighlighter1_202_376_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"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_202_376_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;i&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_301_365_Open_Image" onclick="this.style.display='none'; Codehighlighter1_301_365_Open_Text.style.display='none'; Codehighlighter1_301_365_Closed_Image.style.display='inline'; Codehighlighter1_301_365_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_301_365_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_301_365_Closed_Text.style.display='none'; Codehighlighter1_301_365_Open_Image.style.display='inline'; Codehighlighter1_301_365_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;(foo(</span><span style="color: #000000">'</span><span style="color: #000000">A</span><span style="color: #000000">'</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;foo(</span><span style="color: #000000">'</span><span style="color: #000000">B</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;(i&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;foo(</span><span style="color: #000000">'</span><span style="color: #000000">C</span><span style="color: #000000">'</span><span style="color: #000000">))&nbsp;</span><span id="Codehighlighter1_301_365_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"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_301_365_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foo(</span><span style="color: #000000">'</span><span style="color: #000000">D</span><span style="color: #000000">'</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;</span></div>
<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 id="Code_Closed_Image_003745" style="display: none" onclick="this.style.display='none'; Code_Closed_Text_003745.style.display='none'; Code_Open_Image_003745.style.display='inline'; Code_Open_Text_003745.style.display='inline';" height="16" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"  alt="" /><img id="Code_Open_Image_003745" style="display: inline" onclick="this.style.display='none'; Code_Open_Text_003745.style.display='none'; Code_Closed_Image_003745.style.display='inline'; Code_Closed_Text_003745.style.display='inline';" height="16" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"  alt="" /><span id="Code_Closed_Text_003745" 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="Code_Open_Text_003745" style="display: inline"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">ABDCBDCB</span></span></div>
</div>
<img src ="http://www.blogjava.net/microlab4321/aggbug/142696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-09-04 17:26 <a href="http://www.blogjava.net/microlab4321/articles/142696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(摘)JAVA基础(一)：多态(overloading &amp; overridding)的分析 </title><link>http://www.blogjava.net/microlab4321/articles/142683.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Tue, 04 Sep 2007 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/142683.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/142683.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/142683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/142683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/142683.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 出处:http://www.blogjava.net/crazycy/archive/2006/10/11/74622.html&lt;&nbsp;示例1&gt;&nbsp;  &nbsp;1   class &nbsp;Base {&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp; int &nbsp;x&nbsp; = &nbsp; 2 ;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/microlab4321/articles/142683.html'>阅读全文</a><img src ="http://www.blogjava.net/microlab4321/aggbug/142683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-09-04 17:09 <a href="http://www.blogjava.net/microlab4321/articles/142683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于java当中的多线程设计, wait/notify机制 , synchronized与对象锁 </title><link>http://www.blogjava.net/microlab4321/articles/140068.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 27 Aug 2007 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/140068.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/140068.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/140068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/140068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/140068.html</trackback:ping><description><![CDATA[转<a href="http://www.blogjava.net/site120/archive/2007/01/08/92484.html">http://www.blogjava.net/site120/archive/2007/01/08/92484.html</a><br>
<h2 class=diaryTitle>java多线程设计wait/notify机制 (synchronized与对象锁)</h2>
<div class=diaryTitle align=right><font size=2>作者:--猥琐ing</font> </div>
<p>多线程之间需要协调工作。例如，浏览器的一个显示图片的线程displayThread想要执行显示图片的任务，必须等待下载线程downloadThread将该图片下载完毕。如果图片还没有下载完，displayThread可以暂停，当downloadThread完成了任务后，再通知displayThread&#8220;图片准备完毕，可以显示了&#8221;，这时，displayThread继续执行。 </p>
<p>以上逻辑简单的说就是：如果条件不满足，则等待。当条件满足时，等待该条件的线程将被唤醒。在Java中，这个机制的实现依赖于wait/notify。等待机制与锁机制是密切关联的。例如：</p>
<p>synchronized(obj) {<br>&nbsp;&nbsp;&nbsp; while(!condition) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj.<strong><font color=#0000ff>wait()</font></strong>;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; obj.doSomething();<br>}</p>
<p>当线程A获得了obj锁后，发现条件condition不满足，无法继续下一处理，于是线程A就wait() , 放弃对象锁.</p>
<p>之后在另一线程B中，如果B更改了某些条件，使得线程A的condition条件满足了，就可以唤醒线程A：</p>
<p>synchronized(obj) {<br>&nbsp;&nbsp;&nbsp; condition = true;<br>&nbsp;&nbsp;&nbsp; obj.notify();<br>}</p>
<p><strong><font color=#ff0000>需要注意的概念是：</font> </strong></p>
<p># 调用obj的wait(), notify()方法前，必须获得obj锁，也就是必须写在synchronized(obj) {...} 代码段内。</p>
<p># 调用obj.wait()后，线程A就释放了obj的锁，否则线程B无法获得obj锁，也就无法在synchronized(obj) {...} 代码段内唤醒A。</p>
<p># 当obj.wait()方法返回后，线程A需要再次获得obj锁，才能继续执行。</p>
<p># 如果A1,A2,A3都在obj.wait()，则B调用obj.notify()只能唤醒A1,A2,A3中的一个（具体哪一个由JVM决定）。</p>
<p># obj.notifyAll()则能全部唤醒A1,A2,A3，但是要继续执行obj.wait()的下一条语句，必须获得obj锁，因此，A1,A2,A3只有一个有机会获得锁继续执行，例如A1，其余的需要等待A1释放obj锁之后才能继续执行。</p>
<p># 当B调用obj.notify/notifyAll的时候，B正持有obj锁，因此，A1,A2,A3虽被唤醒，但是仍无法获得obj锁。直到B退出synchronized块，释放obj锁后，A1,A2,A3中的一个才有机会获得锁继续执行。</p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/140068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-27 17:46 <a href="http://www.blogjava.net/microlab4321/articles/140068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 用Java实现几种常见的排序算法 </title><link>http://www.blogjava.net/microlab4321/articles/138178.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 20 Aug 2007 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/138178.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/138178.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/138178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/138178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/138178.html</trackback:ping><description><![CDATA[用Java语言实现的各种排序，包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。
<p clear=both>插入排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class InsertSort implements SortUtil.Sort{<br><br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=1;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=i;(j&gt;0)&amp;&amp;(data[j]&lt;data[j-1]);j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,j,j-1);<br>&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; <br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>冒泡排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class BubbleSort implements SortUtil.Sort{<br><br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=data.length-1;j&gt;i;j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(data[j]&lt;data[j-1]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,j,j-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>选择排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class SelectionSort implements SortUtil.Sort {<br><br>&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp; * (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * <br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; data.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int lowIndex = i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = data.length - 1; j &gt; i; j--) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (data[j] &lt; data[lowIndex]) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lowIndex = j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,i,lowIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>Shell排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class ShellSort implements SortUtil.Sort{<br><br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=data.length/2;i&gt;2;i/=2){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=0;j&lt;i;j++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insertSort(data,j,i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insertSort(data,0,1);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param data<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param j<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param i<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private void insertSort(int[] data, int start, int inc) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=start+inc;i&lt;data.length;i+=inc){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=i;(j&gt;=inc)&amp;&amp;(data[j]&lt;data[j-inc]);j-=inc){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,j,j-inc);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>快速排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class QuickSort implements SortUtil.Sort{<br><br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; quickSort(data,0,data.length-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; private void quickSort(int[] data,int i,int j){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pivotIndex=(i+j)/2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="file://swap/"><font color=#1f3a87>file://swap</font></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,pivotIndex,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int k=partition(data,i-1,j,data[j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,k,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((k-i)&gt;1) quickSort(data,i,k-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((j-k)&gt;1) quickSort(data,k+1,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param data<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param i<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param j<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private int partition(int[] data, int l, int r,int pivot) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(data[++l]&lt;pivot);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while((r!=0)&amp;&amp;data[--r]&gt;pivot);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,l,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(l&lt;r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,l,r);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return l;<br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>改进后的快速排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class ImprovedQuickSort implements SortUtil.Sort {<br><br>&nbsp;&nbsp;&nbsp; private static int MAX_STACK_SIZE=4096;<br>&nbsp;&nbsp;&nbsp; private static int THRESHOLD=10;<br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int[] stack=new int[MAX_STACK_SIZE];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int top=-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pivot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pivotIndex,l,r;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack[++top]=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack[++top]=data.length-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(top&gt;0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j=stack[top--];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i=stack[top--];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pivotIndex=(i+j)/2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pivot=data[pivotIndex];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,pivotIndex,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="file://partition/"><font color=#1f3a87>file://partition</font></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l=i-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r=j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(data[++l]&lt;pivot);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while((r!=0)&amp;&amp;(data[--r]&gt;pivot));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,l,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(l&lt;r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,l,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,l,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((l-i)&gt;THRESHOLD){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack[++top]=i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack[++top]=l-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((j-l)&gt;THRESHOLD){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack[++top]=l+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack[++top]=j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="file://new/"><font color=#1f3a87>file://new</font></a> InsertSort().sort(data);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insertSort(data);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param data<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private void insertSort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=1;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=i;(j&gt;0)&amp;&amp;(data[j]&lt;data[j-1]);j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,j,j-1);<br>&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; <br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>归并排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class MergeSort implements SortUtil.Sort{<br><br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int[] temp=new int[data.length];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergeSort(data,temp,0,data.length-1);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; private void mergeSort(int[] data,int[] temp,int l,int r){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int mid=(l+r)/2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(l==r) return ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergeSort(data,temp,l,mid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergeSort(data,temp,mid+1,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=l;i&lt;=r;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp[i]=data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i1=l;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i2=mid+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int cur=l;cur&lt;=r;cur++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i1==mid+1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[cur]=temp[i2++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(i2&gt;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[cur]=temp[i1++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(temp[i1]&lt;temp[i2])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[cur]=temp[i1++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[cur]=temp[i2++];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>改进后的归并排序:</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class ImprovedMergeSort implements SortUtil.Sort {<br><br>&nbsp;&nbsp;&nbsp; private static final int THRESHOLD = 10;<br><br>&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp; * (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * <br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int[] temp=new int[data.length];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergeSort(data,temp,0,data.length-1);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; private void mergeSort(int[] data, int[] temp, int l, int r) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i, j, k;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int mid = (l + r) / 2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (l == r)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((mid - l) &gt;= THRESHOLD)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergeSort(data, temp, l, mid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insertSort(data, l, mid - l + 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((r - mid) &gt; THRESHOLD)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergeSort(data, temp, mid + 1, r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insertSort(data, mid + 1, r - mid);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = l; i &lt;= mid; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp[i] = data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (j = 1; j &lt;= r - mid; j++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp[r - j + 1] = data[j + mid];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a = temp[l];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int b = temp[r];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = l, j = r, k = l; k &lt;= r; k++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a &lt; b) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[k] = temp[i++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = temp[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[k] = temp[j--];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = temp[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param data<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param l<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param i<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private void insertSort(int[] data, int start, int len) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=start+1;i&lt;start+len;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=i;(j&gt;start) &amp;&amp; data[j]&lt;data[j-1];j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(data,j,j-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>堆排序：</p>
<p class=code>package org.rut.util.algorithm.support;<br><br>import org.rut.util.algorithm.SortUtil;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class HeapSort implements SortUtil.Sort{<br><br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxHeap h=new MaxHeap();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h.init(data);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;data.length;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h.remove();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.arraycopy(h.queue,1,data,0,data.length);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp; private static class MaxHeap{&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; void init(int[] data){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.queue=new int[data.length+1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queue[++size]=data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fixUp(size);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int size=0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int[] queue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int get() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return queue[1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void remove() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(queue,1,size--);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fixDown(1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="file://fixdown/"><font color=#1f3a87>file://fixdown</font></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void fixDown(int k) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((j = k &lt;&lt; 1) &lt;= size) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (j &lt; size &amp;&amp; queue[j]&lt;queue[j+1])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queue[k]&gt;queue[j]) <a href="file://不/"><font color=#1f3a87>file://不</font></a>用交换<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(queue,j,k);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void fixUp(int k) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (k &gt; 1) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j = k &gt;&gt; 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queue[j]&gt;queue[k])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortUtil.swap(queue,j,k);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; }<br><br>}</p>
<p>SortUtil：</p>
<p class=code>package org.rut.util.algorithm;<br><br>import org.rut.util.algorithm.support.BubbleSort;<br>import org.rut.util.algorithm.support.HeapSort;<br>import org.rut.util.algorithm.support.ImprovedMergeSort;<br>import org.rut.util.algorithm.support.ImprovedQuickSort;<br>import org.rut.util.algorithm.support.InsertSort;<br>import org.rut.util.algorithm.support.MergeSort;<br>import org.rut.util.algorithm.support.QuickSort;<br>import org.rut.util.algorithm.support.SelectionSort;<br>import org.rut.util.algorithm.support.ShellSort;<br><br>/**<br>&nbsp;* @author treeroot<br>&nbsp;* @since 2006-2-2<br>&nbsp;* @version 1.0<br>&nbsp;*/<br>public class SortUtil {<br>&nbsp;&nbsp;&nbsp; public final static int INSERT = 1;<br>&nbsp;&nbsp;&nbsp; public final static int BUBBLE = 2;<br>&nbsp;&nbsp;&nbsp; public final static int SELECTION = 3;<br>&nbsp;&nbsp;&nbsp; public final static int SHELL = 4;<br>&nbsp;&nbsp;&nbsp; public final static int QUICK = 5;<br>&nbsp;&nbsp;&nbsp; public final static int IMPROVED_QUICK = 6;<br>&nbsp;&nbsp;&nbsp; public final static int MERGE = 7;<br>&nbsp;&nbsp;&nbsp; public final static int IMPROVED_MERGE = 8;<br>&nbsp;&nbsp;&nbsp; public final static int HEAP = 9;<br><br>&nbsp;&nbsp;&nbsp; public static void sort(int[] data) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sort(data, IMPROVED_QUICK);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; private static String[] name={<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "insert", "bubble", "selection", "shell", "quick", "improved_quick", "merge", "improved_merge", "heap"<br>&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; private static Sort[] impl=new Sort[]{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new InsertSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new BubbleSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new SelectionSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new ShellSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new QuickSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new ImprovedQuickSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new MergeSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new ImprovedMergeSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new HeapSort()<br>&nbsp;&nbsp;&nbsp; };<br><br>&nbsp;&nbsp;&nbsp; public static String toString(int algorithm){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name[algorithm-1];<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; public static void sort(int[] data, int algorithm) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; impl[algorithm-1].sort(data);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public static interface Sort {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void sort(int[] data);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public static void swap(int[] data, int i, int j) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp = data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[i] = data[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[j] = temp;<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/138178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-20 16:19 <a href="http://www.blogjava.net/microlab4321/articles/138178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String 与 StringBuffer 的效率比较 </title><link>http://www.blogjava.net/microlab4321/articles/137290.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137290.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137290.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137290.html</trackback:ping><description><![CDATA[看看以下代码：<br>将26个英文字母重复加了5000次，<br><br>String tempstr = "abcdefghijklmnopqrstuvwxyz";<br>int times = 5000;<br>long lstart1=System.currentTimeMillis();<br>&nbsp;&nbsp;String str ="";<br>&nbsp;&nbsp;for(int i=0;i&lt;times;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;str+=tempstr;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;long lend1=System.currentTimeMillis();<br>&nbsp;&nbsp;long time = (lend1-lstart1);<br>&nbsp;&nbsp;System.out.println(time);<br><br>可惜我的计算机不是超级计算机，得到的结果每次不一定一样一般为 154735 左右。<br>也就是154秒。<br>我们再看看以下代码<br><br>String tempstr = "abcdefghijklmnopqrstuvwxyz";<br>&nbsp;<br>&nbsp;&nbsp;int times = 5000;<br>long lstart2=System.currentTimeMillis();<br>&nbsp;&nbsp;StringBuffer sb =new&nbsp; StringBuffer();<br>&nbsp;&nbsp;for(int i=0;i&lt;times;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;sb.append(tempstr);<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;long lend2=System.currentTimeMillis();<br>&nbsp;&nbsp;long time2 = (lend2-lstart2);<br>&nbsp;&nbsp;System.out.println(time2);<br>&nbsp;得到的结果为 16 有时还是 0<br>所以结论很明显，StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候，差异更大。不信你试试。<br>下一次我将解释为什么StringBuffer 的效率比String 高这么多。
<img src ="http://www.blogjava.net/microlab4321/aggbug/137290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 15:43 <a href="http://www.blogjava.net/microlab4321/articles/137290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.util.Calendar中的陷阱 </title><link>http://www.blogjava.net/microlab4321/articles/137267.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137267.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137267.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137267.html</trackback:ping><description><![CDATA[<p>需求：<br>从输入框得到用户分开输入的年、月、日，将信息做为Date类型插入数据库</p>
<p>解决一：</p>
<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: #000000">InputBean&nbsp;bean&nbsp;=&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InputBean();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;封装用户输入<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">&nbsp;获取用户输入，封装于bean对象中</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Calendar&nbsp;cal&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Calendar.getInstance();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>cal.set(cal.YEAR,bean.getYear());&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Year</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">cal.set(cal.MONTH,bean.getMonth());&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Month</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">cal.set(cal.DAY_OF_MONTH,bean.getDay());&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Day<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">&nbsp;数据库操作</span></div>
<p>陷阱：<br>Calendar中的MONTH字段和数组下标一样，<font color=#ffa500>从0开始，</font><font color=#ffa500>0代表Calendar.JANUARY，1代表Calendar.FEBUARY&#8230;&#8230;12代表次年Calendar.JANUARY</font>。因此用户输入的月份在置入Calendar对象之前必须进行处理，即减一。<br><br>解决二：</p>
<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: #000000">InputBean&nbsp;bean&nbsp;=&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InputBean();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;封装用户输入<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">&nbsp;获取用户输入，封装于bean对象中</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Calendar&nbsp;cal&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Calendar.getInstance();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>cal.set(cal.YEAR,bean.getYear());&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Year</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">cal.set(cal.MONTH,bean.getMonth()&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Month</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">cal.set(cal.DAY_OF_MONTH,bean.getDay());&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Day</span></div>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 14:54 <a href="http://www.blogjava.net/microlab4321/articles/137267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口与Object类的关系？ </title><link>http://www.blogjava.net/microlab4321/articles/137265.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137265.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137265.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137265.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137265.html</trackback:ping><description><![CDATA[今天凌晨coding的时候发现一个很有趣的现象。&#8220;Object类是Java体系的单根父节点，所有Java类都从Object类继承。&#8221;这句话是大部分green hand都知道的Java金句，毋庸置疑。那如果我问你接口和Object类的关系呢？答案是&#8220;没有关系&#8221;。请看下面的代码：<br><br>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Map&nbsp;map&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HashMap();<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>map.clone();</span></div>
</div>
<br>Map是一个接口，HashMap是一个类。clone()方法在Object类中定义，因此我下意识认为第二行可以这么写。结果编译器报错：clone()方法未定义。这个错误让我很郁闷，看了半天doc才发祥原来Map是一个接口，而接口和Object类没有任何关系，所以Map也就没有继承clone()。于是把代码改成下面的样子：<br><br>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">HashMap&nbsp;map&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HashMap();<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>map.clone();</span></div>
</div>
<br>这样就可以了。 <br><br>兄弟，你这样是测试不出来的。java是绝对多态的。 <br>Map map = new HashMap(); <br>map.clone()调用相当于HashMap.clone()也就是说调用的是从HashMap中的clone方法。但是你没有看清楚object的文档，class要显式implements Clonable接口才可以调用clone方法的&nbsp;
<img src ="http://www.blogjava.net/microlab4321/aggbug/137265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 14:50 <a href="http://www.blogjava.net/microlab4321/articles/137265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java容器分析--数组</title><link>http://www.blogjava.net/microlab4321/articles/137050.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Wed, 15 Aug 2007 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137050.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137050.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137050.html</trackback:ping><description><![CDATA[文章出自:http://www.blogjava.net/flyingis/archive/2005/12/15/24089.html&nbsp;<br>作者：<a href="http://www.blogjava.net/flyingis/"><font color=#000080>Flyingis</font></a><br><span><br>&nbsp;&nbsp;&nbsp; 数组是</span><span>Java</span><span>语言内置的类型，除此之外，</span><span>Java</span><span>有多种保存对象引用的方式。</span><span>Java</span><span>类库提供了一套相当完整的容器类，使用这些类的方法可以保存和操纵对象。下面分别进行讨论，在研究Java容器类之前，先了解一下Java数组的基本功能和特性。</span>
<p><span>1.&nbsp; </span><span>数组的基本特性</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>数组与其它种类的容器</span><span>(List/Set/Map)</span><span>之间的区别在于效率、确定的类型和保存基本类型数据的能力。数组是一种高效的存储和随机访问对象引用序列的方式，使用数组可以快速的访问数组中的元素。但是当创建一个数组对象</span><span>(</span><span>注意和对象数组的区别</span><span>)</span><span>后，数组的大小也就固定了，当数组空间不足的时候就再创建一个新的数组，把旧的数组中所有的引用复制到新的数组中。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Java</span><span>中的数组和容器都需要进行边界检查，如果越界就会得到一个</span><span>RuntimeException</span><span>异常。这点和</span><span>C++</span><span>中有所不同，</span><span>C++</span><span>中</span><span>vector</span><span>的操作符</span><span>[]</span><span>不会做边界检查，这在速度上会有一定的提高，</span><span>Java</span><span>的数组和容器会因为时刻存在的边界检查带来一些性能上的开销。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Java</span><span>中通用的容器类不会以具体的类型来处理对象，容器中的对象都是以</span><span>Object</span><span>类型处理的，这是</span><span>Java</span><span>中所有类的基类。另外，数组可以保存基本类型，而容器不能，它只能保存任意的</span><span>Java</span><span>对象。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>一般情况下，考虑到效率与类型检查，应该尽可能考虑使用数组。如果要解决一般化的问题，数组可能会受到一些限制，这时可以使用</span><span>Java</span><span>提供的容器类。</span>&nbsp;</p>
<p><span>2.&nbsp; </span><span>操作数组的实用功能</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>在</span><span>java.util.Arrays</span><span>类中，有许多</span><span>static</span><span>静态方法，提供了操作数组的一些基本功能：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>equals()</span><span>方法</span><span>----</span><span>用于比较两个数组是否相等，相等的条件是两个数组的元素个数必须相等，并且对应位置的元素也相等。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>fill()</span><span>方法</span><span>----</span><span>用以某个值填充整个数组，这个方法有点笨。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>asList()</span><span>方法</span><span>----</span><span>接受任意的数组为参数，将其转变为</span><span>List</span><span>容器。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>binarySearch()</span><span>方法</span><span>----</span><span>用于在已经排序的数组中查找元素，需要注意的是必须是已经排序过的数组。当</span><span>Arrays.binarySearch()</span><span>找到了查找目标时，该方法将返回一个等于或大于</span><span>0</span><span>的值，否则将返回一个负值，表示在该数组目前的排序状态下此目标元素所应该插入的位置。负值的计算公式是</span><span>&#8220;-x<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="True" HasSpace="False" SourceValue="1" UnitName="&#8221;">-1&#8221;</st1:chmetcnv></span><span>。</span><span>x</span><span>指的是第一个大于查找对象的元素在数组中的位置，如果数组中所有的元素都小于要查找的对象，则</span><span>x = a.size()</span><span>。如果数组中包含重复的元素，则无法保证找到的是哪一个元素，如果需要对没有重复元素的数组排序，可以使用</span><span>TreeSet</span><span>或者</span><span>LinkedHashSet</span><span>。另外，如果使用</span><span>Comparator</span><span>排序了某个对象数组，在使用该方法时必须提供同样的</span><span>Comparator</span><span>类型的参数。需要注意的是，基本类型数组无法使用</span><span>Comparator</span><span>进行排序。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sort()</span><span>方法</span><span>----</span><span>对数组进行升序排序。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>在</span><span>Java</span><span>标准类库中，另有</span><span>static</span><span>方法</span><span>System.arraycopy()</span><span>用来复制数组，它针对所有类型做了重载。</span></p>
<p>&#160;</p>
<p><span>3.&nbsp; </span><span>数组的排序</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>在</span><span>Java1.0</span><span>和</span><span>1.1</span><span>两个版本中，类库缺少基本的算法操作，包括排序的操作，</span><span>Java2</span><span>对此进行了改善。在进行排序的操作时，需要根据对象的实际类型执行比较操作，如果为每种不同的类型各自编写一个不同的排序方法，将会使得代码很难被复用。一般的程序设计目标应是&#8220;将保持不变的事物与会发改变的事物相分离&#8221;。在这里，不变的是通用的排序算法，变化的是各种对象相互比较的方式。</span></p>
<p><span>Java</span><span>有两种方式来实现比较的功能，一种是实现</span><span>java.lang.Comparable</span><span>接口，该接口只有一个</span><span>compareTo()</span><span>方法，并以一个</span><span>Object</span><span>类为参数，如果当前对象小于参数则返回负值，如果相等返回零，如果当前对象大于参数则返回正值。另一种比较方法是采用策略</span><span>(strategy)</span><span>设计模式，将会发生变化的代码封装在它自己的类</span><span>(</span><span>策略对象</span><span>)</span><span>中，再将策略对象交给保持不变的代码中，后者使用此策略实现它的算法。因此，可以为不同的比较方式生成不同的对象，将它们用在同样的排序程序中。在此情况下，通过定义一个实现了</span><span>Comparator</span><span>接口的类而创建了一个策略，这个策略类有</span><span>compare()</span><span>和</span><span>equals()</span><span>两个方法，一般情况下实现</span><span>compare()</span><span>方法即可。</span></p>
<p><span>使用上述两种方法即可对任意基本类型的数组进行排序，也可以对任意的对象数组进行排序。再提示一遍，基本类型数组无法使用</span><span>Comparator</span><span>进行排序。</span></p>
<p><span>Java</span><span>标准类库中的排序算法针对排序的类型进行了优化——针对基本类型设计了&#8220;快速排序&#8221;，针对对象设计的&#8220;稳定归并排序&#8221;。一般不用担心其性能。<br></span><span><br></span></p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-15 21:22 <a href="http://www.blogjava.net/microlab4321/articles/137050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swt/Jface tableViewer入门教程一(显示tableViewer) </title><link>http://www.blogjava.net/microlab4321/articles/136356.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 13 Aug 2007 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/136356.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/136356.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/136356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/136356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/136356.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1，简单显示,表格的式样见注释中的内容import&nbsp;org.eclipse.jface.viewers.TableViewer;import&nbsp;org.eclipse.swt.SWT;import&nbsp;org.eclipse.swt.widgets.Display;import&nbsp;org.eclipse.swt.widgets.Shell;import&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/microlab4321/articles/136356.html'>阅读全文</a><img src ="http://www.blogjava.net/microlab4321/aggbug/136356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-13 13:28 <a href="http://www.blogjava.net/microlab4321/articles/136356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>swt入门 --常用组件的使用</title><link>http://www.blogjava.net/microlab4321/articles/136355.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 13 Aug 2007 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/136355.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/136355.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/136355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/136355.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/136355.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: swt的常用组件button ,text ,combo,list ,还有一些容器类composite ,group，这里选择几个，列写简单的用法不写解释了，因为代码很简单，而且代码上的注释足以说明.1,combo&nbsp; 和textpackage&nbsp;com.test;import&nbsp;org.eclipse.swt.SWT;import&nbsp;org.eclipse.sw...&nbsp;&nbsp;<a href='http://www.blogjava.net/microlab4321/articles/136355.html'>阅读全文</a><img src ="http://www.blogjava.net/microlab4321/aggbug/136355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-13 13:27 <a href="http://www.blogjava.net/microlab4321/articles/136355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试常见问题1: 字符串分割 </title><link>http://www.blogjava.net/microlab4321/articles/136353.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 13 Aug 2007 05:23:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/136353.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/136353.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/136353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/136353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/136353.html</trackback:ping><description><![CDATA[<p>下午面试两个同志, 感觉现在的同志们是 Spring, Hibernate 很熟悉, 但是 J2SE 反而陌生了.</p>
<p>可以用两个方法来分割字符串为数组.</p>
<p><strong>1. java.lang.String 的 split() 方法, JDK 1.4 or later</strong></p>
<p>&nbsp;</p>
<h5>split</h5>
<pre>public <a href="http://gceclub.sun.com.cn/java/lang/String.html"><font color=#1a8bc8>String</font></a>[] <strong>split</strong>(<a href="http://gceclub.sun.com.cn/java/lang/String.html"><font color=#1a8bc8>String</font></a>&nbsp;regex,
int&nbsp;limit)</pre>
<dl>
<dd>根据匹配给定的<a href="http://gceclub.sun.com.cn/java/util/regex/Pattern.html#sum"><font color=#1a8bc8>正则表达式</font></a>来拆分此字符串。
<p>此方法返回的数组包含此字符串的每个子字符串，这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分，则结果数组只具有一个元素，即此字符串。
<p><tt>limit</tt> 参数控制模式应用的次数，因此影响结果数组的长度。如果该限制 <em>n</em> 大于 0，则模式将被最多应用 <em>n</em>&nbsp;-&nbsp;1 次，数组的长度将不会大于 <em>n</em>，而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 <em>n</em> 为非正，则模式将被应用尽可能多的次数，而且数组可以是任意长度。如果 <em>n</em> 为零，则模式将被应用尽可能多的次数，数组可有任何长度，并且结尾空字符串将被丢弃。
<p>例如，字符串 <tt>"boo:and:foo"</tt> 使用这些参数可生成下列结果：
<blockquote>
<p>Regex<br>Limit<br>结果
<p>:<br>2<br><tt>{ "boo", "and:foo" }</tt>
<p>:<br>5<br><tt>{ "boo", "and", "foo" }</tt>
<p>:<br>-2<br><tt>{ "boo", "and", "foo" }</tt>
<p>o<br>5<br><tt>{ "b", "", ":and:f", "", "" }</tt>
<p>o<br>-2<br><tt>{ "b", "", ":and:f", "", "" }</tt>
<p>o<br>0<br><tt>{ "b", "", ":and:f" }</tt></p>
</blockquote>
<p>这种形式的方法调用 <em>str.</em><tt>split(</tt><em>regex</em><tt>,</tt> <em>n</em><tt>)</tt> 产生与以下表达式完全相同的结果：
<blockquote><a href="http://gceclub.sun.com.cn/java/util/regex/Pattern.html"><code><font color=#1a8bc8>Pattern</font></code></a>.<a href="http://gceclub.sun.com.cn/java/util/regex/Pattern.html#compile(java.lang.String)"><code><font color=#1a8bc8>compile</font></code></a><tt>(</tt><em>regex</em><tt>)</tt>.<a href="http://gceclub.sun.com.cn/java/util/regex/Pattern.html#split(java.lang.CharSequence, int)"><code><font color=#1a8bc8>split</font></code></a><tt>(</tt><em>str</em><tt>,</tt> <em>n</em><tt>)</tt></blockquote>
<dd>
<dl></dl>
<dd>
<dl>
<dt><strong>参数：</strong>
<dd><code>regex</code> - 定界正则表达式
<dd><code>limit</code> - 结果阈值，如上所述
<dt><strong>返回：</strong>
<dd>字符串数组，根据给定正则表达式的匹配来拆分此字符串，从而生成此数组
<dt><strong>抛出：</strong>
<dd><code><a href="http://gceclub.sun.com.cn/java/util/regex/PatternSyntaxException.html"><font color=#1a8bc8>PatternSyntaxException</font></a></code> - 如果正则表达式的语法无效
<dt><strong>从以下版本开始：</strong>
<dd>1.4
<dt><strong>另请参见：</strong>
<dd><a href="http://gceclub.sun.com.cn/java/util/regex/Pattern.html"><code><font color=#1a8bc8>Pattern</font></code></a></dd></dl></dd></dl><font color=#1a8bc8>
<hr>
</font><a></a>
<h5>split</h5>
<pre>public <a href="http://gceclub.sun.com.cn/java/lang/String.html"><font color=#1a8bc8>String</font></a>[] <strong>split</strong>(<a href="http://gceclub.sun.com.cn/java/lang/String.html"><font color=#1a8bc8>String</font></a>&nbsp;regex)</pre>
<dl>
<dd>根据给定的正则表达式的匹配来拆分此字符串。
<p>该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 <a href="http://gceclub.sun.com.cn/java/lang/String.html#split(java.lang.String, int)"><code><font color=#1a8bc8>split</font></code></a> 方法。因此，结果数组中不包括结尾空字符串。
<p>例如，字符串 <tt>"boo:and:foo"</tt> 产生带有下面这些表达式的结果：
<blockquote>
<p>Regex<br>结果
<p>:<br><tt>{ "boo", "and", "foo" }</tt>
<p>o<br><tt>{ "b", "", ":and:f" }</tt></p>
</blockquote>
<dd>
<dl></dl>
<dd>
<dl>
<dt><strong>参数：</strong>
<dd><code>regex</code> - 定界正则表达式
<dt><strong>返回：</strong>
<dd>字符串数组，根据给定正则表达式的匹配来拆分此字符串，从而生成此数组。
<dt><strong>抛出：</strong>
<dd><code><a href="http://gceclub.sun.com.cn/java/util/regex/PatternSyntaxException.html"><font color=#1a8bc8>PatternSyntaxException</font></a></code> - 如果正则表达式的语法无效
<dt><strong>从以下版本开始：</strong>
<dd>1.4
<dt><strong>另请参见：</strong>
<dd><a href="http://gceclub.sun.com.cn/java/util/regex/Pattern.html"><code><font color=#1a8bc8>Pattern</font></code></a></dd></dl></dd></dl>
<p><strong>2. java.util.Tokenizer JDK 1.0 or later</strong></p>
<p><strong></strong>&nbsp;</p>
<p><strong></strong>&nbsp;</p>
<p>string tokenizer 类允许应用程序将字符串分解为标记。tokenization 方法比 <code>StreamTokenizer</code> 类所使用的方法更简单。<code>StringTokenizer</code> 方法不区分标识符、数和带引号的字符串，它们也不识别并跳过注释。
<p>可以在创建时指定，也可以根据每个标记来指定分隔符（分隔标记的字符）集合。
<p><code>StringTokenizer</code> 的实例有两种行为方式，这取决于它在创建时使用的 <code>returnDelims</code> 标志的值是 <code>true</code> 还是 <code>false</code>：
<ul>
    <li>如果标志为 <code>false</code>，则分隔符字符用来分隔标记。标记是连续字符（不是分隔符）的最大序列。
    <li>如果标志为 <code>true</code>，则认为那些分隔符字符本身即为标记。因此标记要么是一个分隔符字符，要么是那些连续字符（不是分隔符）的最大序列。 </li>
</ul>
<p><tt>StringTokenizer</tt> 对象在内部维护字符串中要被标记的当前位置。某些操作将此当前位置移至已处理的字符后。
<p>通过截取字符串的一个子串来返回标记，该字符串用于创建 <tt>StringTokenizer</tt> 对象。
<p>下面是一个使用 tokenizer 的实例。代码如下：
<blockquote>
<pre>     StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
</pre>
</blockquote>
<p>输出以下字符串：
<blockquote>
<pre>     this
is
a
test</pre>
</blockquote>
<pre><tt>StringTokenizer</tt> 是出于兼容性的原因而被保留的遗留类（虽然在新代码中并不鼓励使用它）。建议所有寻求此功能的人使用 <tt>String</tt> 的 <tt>split</tt> 方法或 java.util.regex 包。 </pre>
<p>下面的示例阐明了如何使用 <tt>String.split</tt> 方法将字符串分解为基本标记：
<blockquote>
<pre>     String[] result = "this is a test".split("\\s");
for (int x=0; x&lt;result.length; x++)
System.out.println(result[x]);
</pre>
</blockquote>
<p>输出以下字符串：
<blockquote>
<pre>     this
is
a
test
</pre>
</blockquote>
<img src ="http://www.blogjava.net/microlab4321/aggbug/136353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-13 13:23 <a href="http://www.blogjava.net/microlab4321/articles/136353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swt/Jface进度条 </title><link>http://www.blogjava.net/microlab4321/articles/136309.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 13 Aug 2007 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/136309.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/136309.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/136309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/136309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/136309.html</trackback:ping><description><![CDATA[处理长时间的任务的时候常需要进度条显示，有几种实现方式<br>1，普通的进度条<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: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.lang.reflect.InvocationTargetException;<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: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.eclipse.core.runtime.IProgressMonitor;<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;org.eclipse.jface.dialogs.ProgressMonitorDialog;<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;org.eclipse.jface.operation.IRunnableWithProgress;<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;org.eclipse.swt.widgets.Display;<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;org.eclipse.swt.widgets.Shell;<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><br><img id=Codehighlighter1_323_1188_Open_Image onclick="this.style.display='none'; Codehighlighter1_323_1188_Open_Text.style.display='none'; Codehighlighter1_323_1188_Closed_Image.style.display='inline'; Codehighlighter1_323_1188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_323_1188_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_323_1188_Closed_Text.style.display='none'; Codehighlighter1_323_1188_Open_Image.style.display='inline'; Codehighlighter1_323_1188_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;TestProgress&nbsp;</span><span id=Codehighlighter1_323_1188_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_323_1188_Open_Text><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: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;stopflg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_359_409_Open_Image onclick="this.style.display='none'; Codehighlighter1_359_409_Open_Text.style.display='none'; Codehighlighter1_359_409_Closed_Image.style.display='inline'; Codehighlighter1_359_409_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_359_409_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_359_409_Closed_Text.style.display='none'; Codehighlighter1_359_409_Open_Image.style.display='inline'; Codehighlighter1_359_409_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_359_409_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">/**&nbsp;*/</span><span id=Codehighlighter1_359_409_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Launch&nbsp;the&nbsp;application<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;args<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_467_1185_Open_Image onclick="this.style.display='none'; Codehighlighter1_467_1185_Open_Text.style.display='none'; Codehighlighter1_467_1185_Closed_Image.style.display='inline'; Codehighlighter1_467_1185_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_467_1185_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_467_1185_Closed_Text.style.display='none'; Codehighlighter1_467_1185_Open_Image.style.display='inline'; Codehighlighter1_467_1185_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 style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_467_1185_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_467_1185_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">final</span><span style="COLOR: #000000">&nbsp;Display&nbsp;display&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Display.getDefault();<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">final</span><span style="COLOR: #000000">&nbsp;Shell&nbsp;shell&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Shell();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell.setSize(</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">375</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;shell.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SWT&nbsp;Application</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;<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">//<br><img id=Codehighlighter1_685_993_Open_Image onclick="this.style.display='none'; Codehighlighter1_685_993_Open_Text.style.display='none'; Codehighlighter1_685_993_Closed_Image.style.display='inline'; Codehighlighter1_685_993_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_685_993_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_685_993_Closed_Text.style.display='none'; Codehighlighter1_685_993_Open_Image.style.display='inline'; Codehighlighter1_685_993_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;IRunnableWithProgress&nbsp;runnable&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;IRunnableWithProgress()</span><span id=Codehighlighter1_685_993_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_685_993_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_787_989_Open_Image onclick="this.style.display='none'; Codehighlighter1_787_989_Open_Text.style.display='none'; Codehighlighter1_787_989_Closed_Image.style.display='inline'; Codehighlighter1_787_989_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_787_989_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_787_989_Closed_Text.style.display='none'; Codehighlighter1_787_989_Open_Image.style.display='inline'; Codehighlighter1_787_989_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;run(IProgressMonitor&nbsp;monitor)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;InvocationTargetException,&nbsp;InterruptedException&nbsp;</span><span id=Codehighlighter1_787_989_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_787_989_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;&nbsp;&nbsp;&nbsp;&nbsp;monitor.beginTask(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">generate</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">);<br><img id=Codehighlighter1_854_959_Open_Image onclick="this.style.display='none'; Codehighlighter1_854_959_Open_Text.style.display='none'; Codehighlighter1_854_959_Closed_Image.style.display='inline'; Codehighlighter1_854_959_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_854_959_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_854_959_Closed_Text.style.display='none'; Codehighlighter1_854_959_Open_Image.style.display='inline'; Codehighlighter1_854_959_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_854_959_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_854_959_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_885_906_Open_Image onclick="this.style.display='none'; Codehighlighter1_885_906_Open_Text.style.display='none'; Codehighlighter1_885_906_Closed_Image.style.display='inline'; Codehighlighter1_885_906_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_885_906_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_885_906_Closed_Text.style.display='none'; Codehighlighter1_885_906_Open_Image.style.display='inline'; Codehighlighter1_885_906_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(monitor.isCanceled())</span><span id=Codehighlighter1_885_906_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_885_906_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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</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;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.worked(</span><span style="COLOR: #000000">1</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="COLOR: #000000">50</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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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;&nbsp;&nbsp;&nbsp;&nbsp;monitor.done();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></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;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ProgressMonitorDialog(shell).run(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,&nbsp;runnable);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell.open();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell.layout();<br><img id=Codehighlighter1_1122_1182_Open_Image onclick="this.style.display='none'; Codehighlighter1_1122_1182_Open_Text.style.display='none'; Codehighlighter1_1122_1182_Closed_Image.style.display='inline'; Codehighlighter1_1122_1182_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1122_1182_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1122_1182_Closed_Text.style.display='none'; Codehighlighter1_1122_1182_Open_Image.style.display='inline'; Codehighlighter1_1122_1182_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">shell.isDisposed())&nbsp;</span><span id=Codehighlighter1_1122_1182_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1122_1182_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;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">display.readAndDispatch())<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;&nbsp;&nbsp;&nbsp;&nbsp;display.sleep();<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/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><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>
2,反复循环的进度条<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: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.lang.reflect.InvocationTargetException;<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: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.eclipse.core.runtime.IProgressMonitor;<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;org.eclipse.jface.dialogs.ProgressMonitorDialog;<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;org.eclipse.jface.operation.IRunnableWithProgress;<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;org.eclipse.swt.widgets.Display;<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;org.eclipse.swt.widgets.Shell;<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><br><img id=Codehighlighter1_323_1257_Open_Image onclick="this.style.display='none'; Codehighlighter1_323_1257_Open_Text.style.display='none'; Codehighlighter1_323_1257_Closed_Image.style.display='inline'; Codehighlighter1_323_1257_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_323_1257_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_323_1257_Closed_Text.style.display='none'; Codehighlighter1_323_1257_Open_Image.style.display='inline'; Codehighlighter1_323_1257_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;TestProgress&nbsp;</span><span id=Codehighlighter1_323_1257_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_323_1257_Open_Text><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: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;stopflg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_359_409_Open_Image onclick="this.style.display='none'; Codehighlighter1_359_409_Open_Text.style.display='none'; Codehighlighter1_359_409_Closed_Image.style.display='inline'; Codehighlighter1_359_409_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_359_409_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_359_409_Closed_Text.style.display='none'; Codehighlighter1_359_409_Open_Image.style.display='inline'; Codehighlighter1_359_409_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_359_409_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">/**&nbsp;*/</span><span id=Codehighlighter1_359_409_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Launch&nbsp;the&nbsp;application<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;args<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_467_1254_Open_Image onclick="this.style.display='none'; Codehighlighter1_467_1254_Open_Text.style.display='none'; Codehighlighter1_467_1254_Closed_Image.style.display='inline'; Codehighlighter1_467_1254_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_467_1254_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_467_1254_Closed_Text.style.display='none'; Codehighlighter1_467_1254_Open_Image.style.display='inline'; Codehighlighter1_467_1254_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 style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_467_1254_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_467_1254_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">final</span><span style="COLOR: #000000">&nbsp;Display&nbsp;display&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Display.getDefault();<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">final</span><span style="COLOR: #000000">&nbsp;Shell&nbsp;shell&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Shell();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell.setSize(</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">375</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;shell.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SWT&nbsp;Application</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;<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">//<br><img id=Codehighlighter1_685_1062_Open_Image onclick="this.style.display='none'; Codehighlighter1_685_1062_Open_Text.style.display='none'; Codehighlighter1_685_1062_Closed_Image.style.display='inline'; Codehighlighter1_685_1062_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_685_1062_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_685_1062_Closed_Text.style.display='none'; Codehighlighter1_685_1062_Open_Image.style.display='inline'; Codehighlighter1_685_1062_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;IRunnableWithProgress&nbsp;runnable&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;IRunnableWithProgress()</span><span id=Codehighlighter1_685_1062_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_685_1062_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_787_1058_Open_Image onclick="this.style.display='none'; Codehighlighter1_787_1058_Open_Text.style.display='none'; Codehighlighter1_787_1058_Closed_Image.style.display='inline'; Codehighlighter1_787_1058_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_787_1058_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_787_1058_Closed_Text.style.display='none'; Codehighlighter1_787_1058_Open_Image.style.display='inline'; Codehighlighter1_787_1058_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;run(IProgressMonitor&nbsp;monitor)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;InvocationTargetException,&nbsp;InterruptedException&nbsp;</span><span id=Codehighlighter1_787_1058_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_787_1058_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;&nbsp;&nbsp;&nbsp;&nbsp;monitor.beginTask(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">generate</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">30</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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_856_1033_Open_Image onclick="this.style.display='none'; Codehighlighter1_856_1033_Open_Text.style.display='none'; Codehighlighter1_856_1033_Closed_Image.style.display='inline'; Codehighlighter1_856_1033_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_856_1033_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_856_1033_Closed_Text.style.display='none'; Codehighlighter1_856_1033_Open_Image.style.display='inline'; Codehighlighter1_856_1033_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_856_1033_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_856_1033_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_874_894_Open_Image onclick="this.style.display='none'; Codehighlighter1_874_894_Open_Text.style.display='none'; Codehighlighter1_874_894_Closed_Image.style.display='inline'; Codehighlighter1_874_894_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_874_894_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_874_894_Closed_Text.style.display='none'; Codehighlighter1_874_894_Open_Image.style.display='inline'; Codehighlighter1_874_894_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(stopflg)</span><span id=Codehighlighter1_874_894_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_874_894_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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</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;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_920_979_Open_Image onclick="this.style.display='none'; Codehighlighter1_920_979_Open_Text.style.display='none'; Codehighlighter1_920_979_Closed_Image.style.display='inline'; Codehighlighter1_920_979_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_920_979_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_920_979_Closed_Text.style.display='none'; Codehighlighter1_920_979_Open_Image.style.display='inline'; Codehighlighter1_920_979_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_920_979_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_920_979_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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.beginTask(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">generate</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">30</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;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.worked(</span><span style="COLOR: #000000">1</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="COLOR: #000000">100</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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.done();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></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;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ProgressMonitorDialog(shell).run(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,&nbsp;runnable);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell.open();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell.layout();<br><img id=Codehighlighter1_1191_1251_Open_Image onclick="this.style.display='none'; Codehighlighter1_1191_1251_Open_Text.style.display='none'; Codehighlighter1_1191_1251_Closed_Image.style.display='inline'; Codehighlighter1_1191_1251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1191_1251_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1191_1251_Closed_Text.style.display='none'; Codehighlighter1_1191_1251_Open_Image.style.display='inline'; Codehighlighter1_1191_1251_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">shell.isDisposed())&nbsp;</span><span id=Codehighlighter1_1191_1251_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"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1191_1251_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;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">display.readAndDispatch())<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;&nbsp;&nbsp;&nbsp;&nbsp;display.sleep();<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/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><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>
3,rcp中后台任务的进度条<br>使用Job建立后台任务，只需要设置job.setUser(true)进度条就出现了，和上边一样，进度条需要自己来控制进度。如果做一个cool的进度条，就看你如何让进度条显示出实际的任务进程。 
<img src ="http://www.blogjava.net/microlab4321/aggbug/136309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-13 10:30 <a href="http://www.blogjava.net/microlab4321/articles/136309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>