??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲13又紧又嫩又水多,亚洲一卡2卡4卡5卡6卡在线99,jlzzjlzz亚洲jzjzjzhttp://www.tkk7.com/fjpan2002/category/3566.htmlzh-cnWed, 28 Feb 2007 07:48:04 GMTWed, 28 Feb 2007 07:48:04 GMT60Java异常处理之陋习展播(ZTQ?/title><link>http://www.tkk7.com/fjpan2002/articles/57079.html</link><dc:creator>勇敢的心</dc:creator><author>勇敢的心</author><pubDate>Fri, 07 Jul 2006 01:53:00 GMT</pubDate><guid>http://www.tkk7.com/fjpan2002/articles/57079.html</guid><wfw:comment>http://www.tkk7.com/fjpan2002/comments/57079.html</wfw:comment><comments>http://www.tkk7.com/fjpan2002/articles/57079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fjpan2002/comments/commentRss/57079.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fjpan2002/services/trackbacks/57079.html</trackback:ping><description><![CDATA[ <p> <font size="2">java 异常  </font> </p> <p> <br /> <font size="2">你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机Ӟ在下面这D代码中Q你能够q速找出异常处理的六个问题吗?  </font> </p> <p> <font size="2">[code:1:48e2a3bb92] <br />1 OutputStreamWriter out = ... </font> </p> <p> <font size="2">2 java.sql.Connection conn = ... </font> </p> <p> <font size="2">3 try { // ?</font> </p> <p> <font size="2">4    Statement stat = conn.createStatement();                                                                           </font> </p> <p> <font size="2">5    ResultSet rs = stat.executeQuery( </font> </p> <p> <font size="2">6    "select uid, name from user"); </font> </p> <p> <font size="2">7    while (rs.next()) </font> </p> <p> <font size="2">8    { </font> </p> <p> <font size="2">9       out.println("IDQ? + rs.getString("uid") // ?</font> </p> <p> <font size="2">10     "Q姓名:" + rs.getString("name")); </font> </p> <p> <font size="2">11   } </font> </p> <p> <font size="2">12   conn.close(); // ?</font> </p> <p> <font size="2">13   out.close(); </font> </p> <p> <font size="2">14 } </font> </p> <p> <font size="2">15 catch(Exception ex) // ?</font> </p> <p> <font size="2">16 { </font> </p> <p> <font size="2">17    ex.printStackTrace(); //_?</font> </p> <p> <font size="2">18 } <br />[/code:1:48e2a3bb92] </font> </p> <p> <font size="2"> </font> </p> <p> <font size="2">  作ؓ一个JavaE序员,你至应该能够找Z个问题。但是,如果你不能找出全部六个问题,Ll阅L文。?</font> </p> <p> <br /> <font size="2">  本文讨论的不是Java异常处理的一般性原则,因ؓq些原则已经被大多数人熟知。我们要做的是分析各U可UCؓ“反例”(anti-patternQ的q背优秀~码规范的常见坏习惯Q帮助读者熟悉这些典型的反面例子Q从而能够在实际工作中敏锐地察觉和避免这些问题。?</font> </p> <p> <br /> <font size="2">  反例之一Q丢弃异?</font> </p> <p> <br /> <font size="2">  代码Q?5?18行。?</font> </p> <p> <br /> <font size="2">  q段代码捕获了异常却不作M处理Q可以算得上Java~程中的杀手。从问题出现的频J程度和害E度来看Q它也许可以和C/C++E序的一个恶名远播的问题相提q论——不查缓冲区是否已满。如果你看到了这U丢弃(而不是抛出)异常的情况,可以癑ֈ之九十九地肯定代码存在问题(在极数情况下,q段代码有存在的理由Q但最好加上完整的注释Q以免引起别解)。?</font> </p> <p> <br /> <font size="2">  q段代码的错误在于,异常Q几乎)L意味着某些事情不对劲了Q或者说臛_发生了某些不d的事情,我们不应该对E序发出的求救信号保持沉默和无动于衷。调用一下printStackTrace不上“处理异常”。不错,调用printStackTrace对调试程序有帮助Q但E序调试阶段l束之后QprintStackTrace׃应再在异常处理模块中担负主要责Q了。?</font> </p> <p> <br /> <font size="2">  丢弃异常的情形非常普遍。打开JDK的ThreadDeathcȝ文档Q可以看C面这D说明:“特别地Q虽然出现ThreadDeath是一U‘正常的情Ş’,但ThreadDeathcLError而不是Exception的子c,因ؓ许多应用会捕h有的Exception然后丢弃它不再理睬。”这D话的意思是Q虽然ThreadDeath代表的是一U普通的问题Q但鉴于许多应用会试图捕h有异常然后不予以适当的处理,所以JDK把ThreadDeath定义成了Error的子c,因ؓErrorcM表的是一般的应用不应该去捕获的严重问题。可见,丢弃异常q一坏习惯是如此常见Q它甚至已经影响CJava本n的设计。?</font> </p> <p> <br /> <font size="2">  那么Q应该怎样Ҏ呢?主要有四个选择Q?</font> </p> <p> <br /> <font size="2">  1、处理异常。针对该异常采取一些行动,例如修正问题、提醒某个h或进行其他一些处理,要根据具体的情Ş定应该采取的动作。再ơ说明,调用printStackTrace不上已l“处理好了异常”。?</font> </p> <p> <br /> <font size="2">  2、重新抛出异常。处理异常的代码在分析异怹后,认ؓ自己不能处理它,重新抛出异常也不׃ؓ一U选择。?</font> </p> <p> <br /> <font size="2">  3、把该异常{换成另一U异常。大多数情况下,q是指把一个低U的异常转换成应用的异常(其含义更Ҏ被用户了解的异常Q。?</font> </p> <p> <br /> <font size="2">  4、不要捕获异常。?</font> </p> <p> <br /> <font size="2">  l论一Q既然捕获了异常Q就要对它进行适当的处理。不要捕获异怹后又把它丢弃Q不予理睬。?</font> </p> <p> <br /> <font size="2">  反例之二Q不指定具体的异常?</font> </p> <p> <br /> <font size="2">  代码Q?5行。?</font> </p> <p> <br /> <font size="2">  许多时候h们会被这样一U“美妙的”想法吸引:用一个catch语句捕获所有的异常。最常见的情形就是用catch(Exception ex)语句。但实际上,在绝大多数情况下Q这U做法不值得提倡。ؓ什么呢Q?</font> </p> <p> <br /> <font size="2">  要理解其原因Q我们必d一下catch语句的用途。catch语句表示我们预期会出现某U异常,而且希望能够处理该异常。异常类的作用就是告诉Java~译器我们想要处理的是哪一U异常。由于绝大多数异帔R直接或间接从java.lang.ExceptionzQcatch(Exception ex)q当于说我们想要处理几乎所有的异常。?</font> </p> <p> <br /> <font size="2">  再来看看前面的代码例子。我们真正想要捕L异常是什么呢Q最明显的一个是SQLExceptionQ这是JDBC操作中常见的异常。另一个可能的异常是IOExceptionQ因为它要操作OutputStreamWriter。显Ӟ在同一个catch块中处理q两U截然不同的异常是不合适的。如果用两个catch块分别捕获SQLException和IOExceptionp好多了。这是_catch语句应当量指定具体的异常类型,而不应该指定늛范围太广的ExceptioncR?</font> </p> <p> <br /> <font size="2">  另一斚wQ除了这两个特定的异常,q有其他许多异常也可能出现。例如,如果׃某种原因QexecuteQueryq回了nullQ该怎么办?{案是让它们l箋抛出Q即不必捕获也不必处理。实际上Q我们不能也不应该去捕获可能出现的所有异常,E序的其他地方还有捕获异常的Z——直x后由JVM处理。?</font> </p> <p> <br /> <font size="2">  l论二:在catch语句中尽可能指定具体的异常类型,必要时用多个catch。不要试囑֤理所有可能出现的异常。?</font> </p> <p> <br /> <font size="2">  反例之三Q占用资源不释放  </font> </p> <p> <br /> <font size="2">  代码Q??14行。?</font> </p> <p> <br /> <font size="2">  异常改变了程序正常的执行程。这个道理虽然简单,却常常被Z忽视。如果程序用C文g、Socket、JDBCq接之类的资源,即遇到了异常,也要正确释放占用的资源。ؓ此,Java提供了一个简化这cL作的关键词finally。?</font> </p> <p> <br /> <font size="2">  finally是样好东西:不管是否出现了异常,Finally保证在try/catch/finally块结束之前,执行清理d的代码L有机会执行。遗憄是有些h却不习惯使用finally。?</font> </p> <p> <br /> <font size="2">  当然Q编写finally块应当多加小心,特别是要注意在finally块之内抛出的异常——这是执行清理Q务的最后机会,量不要再有难以处理的错误。?</font> </p> <p> <br /> <font size="2">  l论三:保证所有资源都被正释放。充分运用finally关键词。?</font> </p> <p> <br /> <font size="2">  反例之四Q不说明异常的详l信息?</font> </p> <p> <br /> <font size="2">  代码Q??18行。?</font> </p> <p> <br /> <font size="2">  仔细观察q段代码Q如果@环内部出C异常Q会发生什么事情?我们可以得到_的信息判断@环内部出错的原因吗?不能。我们只能知道当前正在处理的cd生了某种错误Q但却不能获得Q何信息判断导致当前错误的原因。?</font> </p> <p> <br /> <font size="2">  printStackTrace的堆栈跟t功能显C出E序q行到当前类的执行流E,但只提供了一些最基本的信息,未能说明实际D错误的原因,同时也不易解诅R?</font> </p> <p> <br /> <font size="2">  因此Q在出现异常Ӟ最好能够提供一些文字信息,例如当前正在执行的类、方法和其他状态信息,包括以一U更适合阅读的方式整理和l织printStackTrace提供的信息。?</font> </p> <p> <br /> <font size="2">  l论四:在异常处理模块中提供适量的错误原因信息,l织错误信息使其易于理解和阅诅R?</font> </p> <p> <br /> <font size="2">  反例之五Q过于庞大的try块?</font> </p> <p> <br /> <font size="2">  代码Q??14行。?</font> </p> <p> <br /> <font size="2">  l常可以看到有h把大量的代码攑օ单个try块,实际上这不是好习惯。这U现象之所以常见,原因在于有些h囄事,不愿花时间分析一大块代码中哪几行代码会抛出异常、异常的具体cd是什么。把大量的语句装入单个巨大的try块就象是出门旅游时把所有日常用品塞入一个大子Q虽然东西是带上了,但要扑և来可不容易。?</font> </p> <p> <br /> <font size="2">  一些新手常常把大量的代码放入单个try块,然后再在catch语句中声明ExceptionQ而不是分d个可能出现异常的D落q分别捕获其异常。这U做法ؓ分析E序抛出异常的原因带来了困难Q因Z大段代码中有太多的地方可能抛出Exception。?</font> </p> <p> <br /> <font size="2">  l论五:量减小try块的体积。?</font> </p> <p> <br /> <font size="2">  反例之六Q输出数据不完整  </font> </p> <p> <br /> <font size="2">  代码Q??11行。?</font> </p> <p> <br /> <font size="2">  不完整的数据是JavaE序的隐形杀手。仔l观察这D代码,考虑一下如果@环的中间抛出了异常,会发生什么事情。@环的执行当然是要被打断的Q其ơ,catch块会执行——就q些Q再也没有其他动作了。已l输出的数据怎么办?使用q些数据的h或设备将收到一份不完整的(因而也是错误的Q数据,却得不到M有关q䆾数据是否完整的提C。对于有些系l来_数据不完整可能比pȝ停止q行带来更大的损失。?</font> </p> <p> <br /> <font size="2">  较ؓ理想的处|办法是向输备写一些信息,声明数据的不完整性;另一U可能有效的办法是,先缓冲要输出的数据,准备好全部数据之后再一ơ性输出。?</font> </p> <p> <br /> <font size="2">  l论六:全面考虑可能出现的异总及这些异常对执行程的媄响。?</font> </p> <p> <br /> <font size="2">  改写后的代码  </font> </p> <p> <br /> <font size="2">  Ҏ上面的讨论,下面l出改写后的代码。也许有Z说它E微有点啰嗦Q但是它有了比较完备的异常处理机制。?</font> </p> <p> <font size="2">[code:1:48e2a3bb92] <br />OutputStreamWriter out = ... </font> </p> <p> <font size="2">java.sql.Connection conn = ... </font> </p> <p> <font size="2">try { </font> </p> <p> <font size="2">   Statement stat = conn.createStatement(); </font> </p> <p> <font size="2">   ResultSet rs = stat.executeQuery( </font> </p> <p> <font size="2">   "select uid, name from user"); </font> </p> <p> <font size="2">   while (rs.next()) </font> </p> <p> <font size="2">   { </font> </p> <p> <font size="2">      out.println("IDQ? + rs.getString("uid") + </font> </p> <p> <font size="2">      "Q姓? " + rs.getString("name")); </font> </p> <p> <font size="2">   } </font> </p> <p> <font size="2">} </font> </p> <p> <font size="2">catch(SQLException sqlex) </font> </p> <p> <font size="2">{ </font> </p> <p> <font size="2">   out.println("警告Q数据不完整"); </font> </p> <p> <font size="2">   throw new ApplicationException( </font> </p> <p> <font size="2">   "d数据时出现SQL错误", sqlex); </font> </p> <p> <font size="2">} </font> </p> <p> <font size="2">catch(IOException ioex) </font> </p> <p> <font size="2">{ </font> </p> <p> <font size="2">   throw new ApplicationException( </font> </p> <p> <font size="2">   "写入数据时出现IO错误", ioex); </font> </p> <p> <font size="2">} </font> </p> <p> <font size="2">finally </font> </p> <p> <font size="2">{ </font> </p> <p> <font size="2">   if (conn != null) { </font> </p> <p> <font size="2">      try { </font> </p> <p> <font size="2">         conn.close(); </font> </p> <p> <font size="2">      } </font> </p> <p> <font size="2">      catch(SQLException sqlex2) </font> </p> <p> <font size="2">      { </font> </p> <p> <font size="2">          System.err(this.getClass().getName() + </font> </p> <p> <font size="2">          ".mymethod - 不能关闭数据库连? " + </font> </p> <p> <font size="2">          sqlex2.toString()); </font> </p> <p> <font size="2">      } </font> </p> <p> <font size="2">   } </font> </p> <p> <br /> <font size="2">   if (out != null) { </font> </p> <p> <font size="2">      try { </font> </p> <p> <font size="2">         out.close(); </font> </p> <p> <font size="2">      } </font> </p> <p> <font size="2">      catch(IOException ioex2) </font> </p> <p> <font size="2">      { </font> </p> <p> <font size="2">         System.err(this.getClass().getName() + </font> </p> <p> <font size="2">         ".mymethod - 不能关闭输出文g" + </font> </p> <p> <font size="2">         ioex2.toString()); </font> </p> <p> <font size="2">      } </font> </p> <p> <font size="2">   } </font> </p> <p> <font size="2">} <br />[/code:1:48e2a3bb92] </font> </p> <p> <font size="2">  本文的结Z是放之四L准的教条Q有时常识和l验才是最好的老师。如果你对自q做法没有癑ֈ之百的信心,务必加上详细、全面的注释。?<br />  另一斚wQ不要笑话这些错误,不妨问问你自己是否真地彻底摆׃q些坏习惯。即使最有经验的E序员偶也会误入歧途,原因很简单,因ؓ它们确实实带来了“方侎쀝。所有这些反例都可以看作Java~程世界的恶,它们丽动hQ无孔不入,时刻诱惑着你。也许有Z认ؓq些都属于鸡皮蒜毛的事Q不x齿,但请CQ勿以恶而ؓ之,勿以善小而不为?<br /></font> </p> <img src ="http://www.tkk7.com/fjpan2002/aggbug/57079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fjpan2002/" target="_blank">勇敢的心</a> 2006-07-07 09:53 <a href="http://www.tkk7.com/fjpan2002/articles/57079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试?http://www.tkk7.com/fjpan2002/articles/25849.html勇敢的心勇敢的心Thu, 29 Dec 2005 02:53:00 GMThttp://www.tkk7.com/fjpan2002/articles/25849.htmlhttp://www.tkk7.com/fjpan2002/comments/25849.htmlhttp://www.tkk7.com/fjpan2002/articles/25849.html#Feedback0http://www.tkk7.com/fjpan2002/comments/commentRss/25849.htmlhttp://www.tkk7.com/fjpan2002/services/trackbacks/25849.html1、什么是数据库的事务Q事务的原子性?有几U方法可以实C务的原子性?
2、DOM是什么?SAX Parser和DOM Parser有何区别Q?BR>3、同一机器中不同java虚拟机的E序有几U通讯方式Q不同机器的呢?
4、如何v一个线E?如何l束一个线E?如何安全地结束一个线E?
以下为写具体代码题:
5、用java实现一个动态增长的堆栈?BR>6、写一个读写锁Q可以同时多Q一个h写,q用q个d锁实现生产者-消费者同步?BR>7、写一个单例实玎ͼq考虑当它实现可序列化接口的实现?BR>8、写L一U排序方法,q说明如何将q个排序法应用到Java Collection中?BR>9、写一个程序判断一字节byte中有多少bit被置??
思考题Q?BR>10、有一个单向链表,不知道它的头Q有个指针P指向该链表中的节点NQ如何将节点N删除Q?BR>

[基础问答]
1.下面哪些cd以被l承?
java.lang.Thread (T)
java.lang.Number (T)
java.lang.Double (F)
java.lang.Math  (F)
java.lang.Void  (F)
java.lang.Class  (F)
java.lang.ClassLoader (T)

2.抽象cd接口的区?BR>(1)接口可以被多重implements,抽象cd能被单一extends
(2)接口只有定义,抽象cd以有定义和实?BR>(3)接口的字D定义默认ؓ:public static final, 抽象cdD默认是"friendly"(本包可见)

3.Hashtable的原?q说出HashMap与Hashtable的区?BR>HashTable的原?通过节点的关键码定节点的存储位|?即给定节点的关键码k,通过一定的函数关系H(散列函数),得到函数值H(k),此D释ؓ该节点的存储地址.
HashMap 与Hashtable很相?但HashMap 是非同步(unsynchronizded)和可以以null为关键码?

4.forward和redirect的区?BR>forward: an internal transfer in servlet
redirect: 重定??ơrequest,W?ơrequest丢q一ơ的attributs/parameters{?BR>
5.什么是Web容器?
实现J2EE规范中web协议的应?该协议定义了webE序的运行时环境,包括:q发?安全?生命周期理{等.

6.解释下面关于J2EE的名?BR>(1)JNDI:Java Naming & Directory Interface,JAVA命名目录服务.主要提供的功能是Q提供一个目录系l,让其它各地的应用E序在其上面留下自己的烦引,从而满_速查扑֒定位分布式应用程序的功能.
(2)JMSQJava Message Service,JAVA消息服务.主要实现各个应用E序之间的通讯.包括点对点和q播.
(3)JTAQJava Transaction API,JAVA事务服务.提供各种分布式事务服?应用E序只需调用其提供的接口卛_.
(4)JAF: Java Action FrameWork,JAVA安全认证框架.提供一些安全控制方面的框架.让开发者通过各种部v和自定义实现自己的个性安全控制策?
(5)RMI:Remote Method Interface,q程Ҏ调用

7.EJB是基于哪些技术实现的Qƈ?nbsp;出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区?
EJB包括Session Bean、Entity Bean、Message Driven BeanQ基于JNDI、RMI、JAT{技术实?
SessionBean在J2EE应用E序中被用来完成一些服务器端的业务操作Q例如访问数据库、调用其他EJBlg.EntityBean被用来代表应用系l中用到的数?对于客户机,SessionBean是一U非持久性对象,它实现某些在服务器上q行的业务逻辑;EntityBean是一U持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用E序实现的实?
Session Bean q可以再l分?nbsp;Stateful Session Bean ?nbsp;Stateless Session Bean .q两U的 Session Bean都可以将pȝ逻辑攑֜ method之中执行Q不同的?nbsp;Stateful Session Bean 可以记录呼叫者的状态,因此通常来说Q一个用者会有一个相对应?nbsp;Stateful Session Bean 的实?Stateless Session Bean 虽然也是逻辑lgQ但是他却不负责记录使用者状态,也就是说当用者呼?nbsp;Stateless Session Bean 的时候,EJB Container q不会找ȝ定的 Stateless Session Bean 的实体来执行q个 method.换言之,很可能数个用者在执行某个 Stateless Session Bean ?nbsp;methods Ӟ会是同一?nbsp;Bean ?nbsp;Instance 在执?从内存方面来看, Stateful Session Bean ?nbsp;Stateless Session Bean 比较Q?nbsp;Stateful Session Bean 会消?nbsp;J2EE Server 较多的内存,然?nbsp;Stateful Session Bean 的优势却在于他可以维持用者的状?

8.XML的解析方?BR>Sax,DOM,JDOM

9.什么是Web Service?
Web Service是Z使原来各孤立的站点之间的信息能够怺通信、共享而提出的一U接口?BR>Web Service所使用的是Internet上统一、开攄标准Q如HTTP、XML、SOAPQ简单对象访问协议)、WSDL{,所以Web Service可以在Q何支持这些标准的环境QWindows,LinuxQ中使用?BR>注:SOAP协议QSimple Object Access Protocal,单对象访问协议),它是一个用于分散和分布式环境下|络信息交换的基于XML的通讯协议。在此协议下QY件组件或应用E序能够通过标准的HTTP协议q行通讯。它的设计目标就是简单性和扩展性,q有助于大量异构E序和^C间的互操作性,从而存在的应用程序能够被q泛的用戯问?BR>
优势Q?BR>(1).跨^収ͼ
(2).SOAP协议是基于XML和HTTPq些业界的标准的Q得C所有的重要公司的支持?BR>(3).׃使用了SOAPQ数据是以ASCII文本的方式而非二进制传输,调试很方便;q且׃q样Q它的数据容易通过防火墙,不需要防火墙ZE序而单独开一个“漏z”?BR>(4).此外QWebService实现的技术难度要比CORBA和DCOM得多?BR>(5).要实现B2B集成QEDI比较完善与比较复杂;而用WebService则可以低成本的实玎ͼ公怹可以用上?BR>(6).在C/S的程序中QWebService可以实现|页无整体刷新的与服务器打交道ƈ取数?BR>~点Q?BR>(1).WebService使用了XMLҎ据封装,会造成大量的数据要在网l中传输?BR>(2).WebService规范没有规定M与实现相关的l节Q包括对象模型、编E语aQ这一点,它不如CORBA?BR>
10.多线E有几种实现Ҏ,都是什?同步有几U实现方?都是什?
{:多线E有两种实现ҎQ分别是l承ThreadcM实现Runnable接口
同步的实现方面有两种Q分别是synchronized,wait与notify

11.JSP中动态INCLUDE与静态INCLUDE的区别? 
动态INCLUDE用jsp:include动作实现
<jsp:include page="included.jsp" flush="true"/>
它L会检查所含文件中的变化,适合用于包含动态页面,q且可以带参?BR>静态INCLUDE用include伪码实现,定不会检查所含文件的变化Q适用于包含静态页?BR><%@ include file="included.htm" %>
 


[Java~程与程序运行结果]
1.Java~程,打印昨天的当前时?BR>public class YesterdayCurrent{
  public void main(String[] args){
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, -1);
    System.out.println(cal.getTime());
  }
}

2.文gd,实现一个计数器
  public int getNum(){
        int i = -1;
        try{
            String stri="";
            BufferedReader in = new BufferedReader(new FileReader(f));
            while((stri=in.readLine())!=null){
                i = Integer.parseInt(stri.trim());
            }
            in.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return i;
    }
    public void setNum(){
        int i = getNum();
        i++;        
        try{
            PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));  
            out.write(String.valueOf(i));            //可能是编码的原因Q如果直接写入int的话Q将出现java~码和windows~码的؜乱,因此此处写入的是String
            out.close() ;
        }catch(Exception e){
            e.printStackTrace();
        }
    }
3. 指出下面E序的运行结?
class A{
    static{
        System.out.print("1");
    }
    public A(){
        System.out.print("2");
    }
}
class B extends A{
    static{
        System.out.print("a");
    }
    public B(){
        System.out.print("b");
    }   
}
public class Hello{
    public static void main(String[] ars){
        A ab = new B(); //执行到此?l果: 1a2b
 ab = new B(); //执行到此?l果: 1a2bab
    }
}
?cȝstatic 代码D?可以看作是类首次加蝲(被虚拟机加蝲)执行的代?而对于类的加?首先要执行其基类的构?再执行其本n的构?BR>4.写一个Singleton模式的例?BR>public class Singleton{
 private static Singleton single = new Singleton();
 private Singleton(){}
 public Singleton getInstance(){
  return single;
 }
}

[数据库]
1.删除表的重复记录
如果记录完全相同才算重复记录,那么:  (sql server2000下测试通过)
select distinct * into #tmpp from tid
delete from tid     
insert into tid select * from #tmpp
drop table #tmpp
如果有id主键(数字,自增1的那U?,那么:(sql server2000下测试通过)
delete from tableA where id not in
(select id = min(id) from tableA group by name)

2.delete from tablea Q?nbsp;truncate table tablea的区?BR>truncate 语句执行速度?占资源少,q且只记录页删除的日志;
delete Ҏ条记录的删除均需要记录日?BR>

勇敢的心 2005-12-29 10:53 发表评论
]]>
java排序?/title><link>http://www.tkk7.com/fjpan2002/articles/22627.html</link><dc:creator>勇敢的心</dc:creator><author>勇敢的心</author><pubDate>Mon, 05 Dec 2005 12:24:00 GMT</pubDate><guid>http://www.tkk7.com/fjpan2002/articles/22627.html</guid><wfw:comment>http://www.tkk7.com/fjpan2002/comments/22627.html</wfw:comment><comments>http://www.tkk7.com/fjpan2002/articles/22627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fjpan2002/comments/commentRss/22627.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fjpan2002/services/trackbacks/22627.html</trackback:ping><description><![CDATA[<FONT face=Arial>/*q个E序是我在一个帖子上看到的,觉得写的十分的不错,拿出来与大家׃n?/<BR>package com.cucu.test; <BR><BR>public class Sort { <BR><BR>  public void swap(int a[], int i, int j) { <BR>    int tmp = a[i]; <BR>    a[i] = a[j]; <BR>    a[j] = tmp; <BR>  } <BR><BR>  public int partition(int a[], int low, int high) { <BR>    int pivot, p_pos, i; <BR>    p_pos = low; <BR>    pivot = a[p_pos]; <BR>    for (i = low + 1; i <= high; i++) { <BR>      if (a[i] > pivot) { <BR>        p_pos++; <BR>        swap(a, p_pos, i); <BR>      } <BR>    } <BR>    swap(a, low, p_pos); <BR>    return p_pos; <BR>  } <BR><BR>  public void quicksort(int a[], int low, int high) { <BR>    int pivot; <BR>    if (low < high) { <BR>      pivot = partition(a, low, high); <BR>      quicksort(a, low, pivot - 1); <BR>      quicksort(a, pivot + 1, high); <BR>    } <BR><BR>  } <BR><BR>  public static void main(String args[]) { <BR>    int vec[] = new int[] { 37, 47, 23, -5, 19, 56 }; <BR>    int temp; <BR>    //选择排序?Selection Sort) <BR>    long begin = System.currentTimeMillis(); <BR>    for (int k = 0; k < 1000000; k++) { <BR>      for (int i = 0; i < vec.length; i++) { <BR>        for (int j = i; j < vec.length; j++) { <BR>          if (vec[j] > vec[i]) { <BR>            temp = vec[i]; <BR>            vec[i] = vec[j]; <BR>            vec[j] = temp; <BR>          } <BR>        } <BR><BR>      } <BR>    } <BR>    long end = System.currentTimeMillis(); <BR>    System.out.println("选择法用时ؓQ? + (end - begin)); <BR>    //打印排序好的l果 <BR>    for (int i = 0; i < vec.length; i++) { <BR>      System.out.println(vec[i]); <BR>    } <BR>    //  冒排序?Bubble Sort) <BR>    begin = System.currentTimeMillis(); <BR>    for (int k = 0; k < 1000000; k++) { <BR>      for (int i = 0; i < vec.length; i++) { <BR>        for (int j = i; j < vec.length - 1; j++) { <BR>          if (vec[j + 1] > vec[j]) { <BR>            temp = vec[j + 1]; <BR>            vec[j + 1] = vec[j]; <BR>            vec[j] = temp; <BR>          } <BR>        } <BR><BR>      } <BR>    } <BR>    end = System.currentTimeMillis(); <BR>    System.out.println("冒法用时ؓQ? + (end - begin)); <BR>    //打印排序好的l果 <BR>    for (int i = 0; i < vec.length; i++) { <BR>      System.out.println(vec[i]); <BR>    } <BR><BR>    //插入排序?Insertion Sort) <BR>    begin = System.currentTimeMillis(); <BR>    for (int k = 0; k < 1000000; k++) { <BR>      for (int i = 1; i < vec.length; i++) { <BR>        int j = i; <BR>        while (vec[j - 1] < vec[i]) { <BR>          vec[j] = vec[j - 1]; <BR>          j--; <BR>          if (j <= 0) { <BR>            break; <BR>          } <BR>        } <BR>        vec[j] = vec[i]; <BR>      } <BR>    } <BR>    end = System.currentTimeMillis(); <BR>    System.out.println("插入法用时ؓQ? + (end - begin)); <BR>    //打印排序好的l果 <BR>    for (int i = 0; i < vec.length; i++) { <BR>      System.out.println(vec[i]); <BR>    } <BR><BR>    //快速排序法(Quick Sort) <BR><BR>    Sort s = new Sort(); <BR>    begin = System.currentTimeMillis(); <BR>    for (int k = 0; k < 1000000; k++) { <BR>      s.quicksort(vec, 0, 5); <BR>    } <BR>    end = System.currentTimeMillis(); <BR>    System.out.println("快速法用时为:" + (end - begin)); <BR>    //打印排序好的l果 <BR>    for (int i = 0; i < vec.length; i++) { <BR>      System.out.println(vec[i]); <BR>    } <BR>  } <BR><BR>} </FONT><BR><BR>************************************************************************************<BR><BR> <OL> <LI><B><FONT color=#0000ff>package</FONT></B> org.jr.util;<BR> <LI><BR> <LI><I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>* Copyright: Copyright (c) 2002-2004</FONT></I><BR> <LI><I><FONT color=#339900>* Company: JavaResearch(http://www.javaresearch.org)</FONT></I><BR> <LI><I><FONT color=#339900>* 最后更新日?2003q???/FONT></I><BR> <LI><I><FONT color=#339900>* @author Cherami</FONT></I><BR> <LI><I><FONT color=#339900>*/</FONT></I><BR> <LI><BR> <LI><B><FONT color=#0000ff>import</FONT></B> org.jr.*;<BR> <LI><BR> <LI><I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>* 排序工具c,提供常见的需要排序但是又没有实现Comparable接口的类?/FONT></I><BR> <LI><I><FONT color=#339900>* 此类也提供一些创建的排序法的范例?/FONT></I><BR> <LI><I><FONT color=#339900>* @since  0.5</FONT></I><BR> <LI><I><FONT color=#339900>*/</FONT></I><BR> <LI><BR> <LI><B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>class</FONT></B> <A ><FONT color=#ff0000><U>CompareUtil</U></FONT></A> {<BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * U有构造方法,防止cȝ实例化,因ؓ工具cM需要实例化?/FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>private</FONT></B> <A ><FONT color=#ff0000><U>CompareUtil</U></FONT></A>() {<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 比较两个数字?/FONT></I><BR> <LI><I><FONT color=#339900>   * q个Ҏ取Number的doubleD行比较,因此只有在两个数严格相等的情况下才返?Q?/FONT></I><BR> <LI><I><FONT color=#339900>   * 又可能因为Java中Double型和Float的精度不同而导致两个相{的Cq回0?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param o1 W一个数?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param o2 W二个数?/FONT></I><BR> <LI><I><FONT color=#339900>   * @return W一个数字大于第二个q回1Q等于返?Q否则返回-1</FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.5</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B> compare(<B><A ><FONT color=#ff0000><U>Number</U></FONT></A></B> o1, <B><A ><FONT color=#ff0000><U>Number</U></FONT></A></B> o2) {<BR> <LI>    <B><FONT color=#0000ff>double</FONT></B> n1 = o1.doubleValue();<BR> <LI>    <B><FONT color=#0000ff>double</FONT></B> n2 = o2.doubleValue();<BR> <LI>    <B><FONT color=#0000ff>if</FONT></B> (n1 < n2) {<BR> <LI>      <B><FONT color=#0000ff>return</FONT></B> -1;<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>else</FONT></B> <B><FONT color=#0000ff>if</FONT></B> (n1 > n2) {<BR> <LI>      <B><FONT color=#0000ff>return</FONT></B> 1;<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>else</FONT></B> {<BR> <LI>      <B><FONT color=#0000ff>return</FONT></B> 0;<BR> <LI>    }<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 比较两个布尔型倹{?/FONT></I><BR> <LI><I><FONT color=#339900>   * 如果两个的g同,true被认为等?Q而false{于0?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param o1 W一个?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param o2 W二个?/FONT></I><BR> <LI><I><FONT color=#339900>   * @return W一个值大于第二个q回1Q等于返?Q否则返?1</FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.5</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B> compare(<B><A ><FONT color=#ff0000><U>Boolean</U></FONT></A></B> o1, <B><A ><FONT color=#ff0000><U>Boolean</U></FONT></A></B> o2) {<BR> <LI>    <B><FONT color=#0000ff>boolean</FONT></B> b1 = o1.booleanValue();<BR> <LI>    <B><FONT color=#0000ff>boolean</FONT></B> b2 = o2.booleanValue();<BR> <LI>    <B><FONT color=#0000ff>if</FONT></B> (b1 == b2) {<BR> <LI>      <B><FONT color=#0000ff>return</FONT></B> 0;<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>else</FONT></B> <B><FONT color=#0000ff>if</FONT></B> (b1) {<BR> <LI>      <B><FONT color=#0000ff>return</FONT></B> 1;<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>else</FONT></B> {<BR> <LI>      <B><FONT color=#0000ff>return</FONT></B> -1;<BR> <LI>    }<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 冒排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @param isAscent 排序序</FONT></I><BR> <LI><I><FONT color=#339900>   * @return 排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.5</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] n2sort(<B><A ><FONT color=#ff0000><U>Comparable</U></FONT></A></B>[] objects, <B><FONT color=#0000ff>boolean</FONT></B> isAscent) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> i = 0; i < <B><FONT color=#0000ff>length</FONT></B>; i++) {<BR> <LI>      <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> j = i + 1; j < <B><FONT color=#0000ff>length</FONT></B>; j++) {<BR> <LI>        <B><FONT color=#0000ff>if</FONT></B> (isAscent == <B><FONT color=#0000ff>true</FONT></B>) {<BR> <LI>          <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[i]].compareTo(objects[indexes[j]]) > 0) {<BR> <LI>            swap(indexes, i, j);<BR> <LI>          }<BR> <LI>        }<BR> <LI>        <B><FONT color=#0000ff>else</FONT></B> {<BR> <LI>          <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[i]].compareTo(objects[indexes[j]]) < 0) {<BR> <LI>            swap(indexes, i, j);<BR> <LI>          }<BR> <LI>        }<BR> <LI>      }<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 冒排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @param key 排序关键?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param isAscent 排序序</FONT></I><BR> <LI><I><FONT color=#339900>   * @return 排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.5</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] n2sort(<A ><FONT color=#ff0000><U>PropertyComparable</U></FONT></A>[] objects, <B><FONT color=#0000ff>int</FONT></B> key,<BR> <LI>                             <B><FONT color=#0000ff>boolean</FONT></B> isAscent) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> i = 0; i < <B><FONT color=#0000ff>length</FONT></B>; i++) {<BR> <LI>      <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> j = i + 1; j < <B><FONT color=#0000ff>length</FONT></B>; j++) {<BR> <LI>        <B><FONT color=#0000ff>if</FONT></B> (isAscent == <B><FONT color=#0000ff>true</FONT></B>) {<BR> <LI>          <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[i]].compareTo(objects[indexes[j]], key) > 0) {<BR> <LI>            swap(indexes, i, j);<BR> <LI>          }<BR> <LI>        }<BR> <LI>        <B><FONT color=#0000ff>else</FONT></B> {<BR> <LI>          <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[i]].compareTo(objects[indexes[j]], key) < 0) {<BR> <LI>            swap(indexes, i, j);<BR> <LI>          }<BR> <LI>        }<BR> <LI>      }<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 冒排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] n2sort(<B><A ><FONT color=#ff0000><U>Comparable</U></FONT></A></B>[] objects) {<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> n2sort(objects,<B><FONT color=#0000ff>true</FONT></B>);<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 冒排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @param key 排序关键?/FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] n2sort(<A ><FONT color=#ff0000><U>PropertyComparable</U></FONT></A>[] objects, <B><FONT color=#0000ff>int</FONT></B> key) {<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> n2sort(objects,key);<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 插入排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] insertionSort(<B><A ><FONT color=#ff0000><U>Comparable</U></FONT></A></B>[] objects) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> i = 1; i < <B><FONT color=#0000ff>length</FONT></B>; i++) {<BR> <LI>        <B><FONT color=#0000ff>int</FONT></B> j = i;<BR> <LI>        <B><A ><FONT color=#ff0000><U>Comparable</U></FONT></A></B> B = objects[indexes[i]];<BR> <LI>        <B><FONT color=#0000ff>while</FONT></B> ((j > 0) && (objects[indexes[j-1]].compareTo(B) > 0)) {<BR> <LI>            indexes[j] = indexes[j-1];<BR> <LI>            j--;<BR> <LI>        }<BR> <LI>        indexes[j] = i;<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 插入排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @param key 排序关键?/FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] insertionSort(<A ><FONT color=#ff0000><U>PropertyComparable</U></FONT></A>[] objects, <B><FONT color=#0000ff>int</FONT></B> key) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> i = 1; i < <B><FONT color=#0000ff>length</FONT></B>; i++) {<BR> <LI>        <B><FONT color=#0000ff>int</FONT></B> j = i;<BR> <LI>        <B><A ><FONT color=#ff0000><U>Comparable</U></FONT></A></B> B = objects[indexes[i]];<BR> <LI>        <B><FONT color=#0000ff>while</FONT></B> ((j > 0) && (objects[indexes[j-1]].compareTo(B,key) > 0)) {<BR> <LI>            indexes[j] = indexes[j-1];<BR> <LI>            j--;<BR> <LI>        }<BR> <LI>        indexes[j] = i;<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 选择排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] selectionSort(<B><A ><FONT color=#ff0000><U>Comparable</U></FONT></A></B>[] objects) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> i = 0; i < <B><FONT color=#0000ff>length</FONT></B>; i++) {<BR> <LI>        <B><FONT color=#0000ff>int</FONT></B> min = i;<BR> <LI>        <B><FONT color=#0000ff>int</FONT></B> j;<BR> <LI>        <I><FONT color=#339900>//在未排序列表里面查找最元?/FONT></I><BR> <LI>        <B><FONT color=#0000ff>for</FONT></B> (j = i + 1; j < <B><FONT color=#0000ff>length</FONT></B>; j++) {<BR> <LI>            <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[j]].compareTo(objects[indexes[min]]) <0 ) {<BR> <LI>                min = j;<BR> <LI>            }<BR> <LI>        }<BR> <LI>        <I><FONT color=#339900>//最的元素交换到未排序元素的最开?/FONT></I><BR> <LI>        swap(indexes,i,min);<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 选择排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @param key 排序关键?/FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] selectionSort(<A ><FONT color=#ff0000><U>PropertyComparable</U></FONT></A>[] objects, <B><FONT color=#0000ff>int</FONT></B> key) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>for</FONT></B> (<B><FONT color=#0000ff>int</FONT></B> i = 0; i < <B><FONT color=#0000ff>length</FONT></B>; i++) {<BR> <LI>        <B><FONT color=#0000ff>int</FONT></B> min = i;<BR> <LI>        <B><FONT color=#0000ff>int</FONT></B> j;<BR> <LI>        <I><FONT color=#339900>//在未排序列表里面查找最元?/FONT></I><BR> <LI>        <B><FONT color=#0000ff>for</FONT></B> (j = i + 1; j < <B><FONT color=#0000ff>length</FONT></B>; j++) {<BR> <LI>            <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[j]].compareTo(objects[indexes[min]],key) <0 ) { <LI>                min = j;<BR> <LI>            }<BR> <LI>        }<BR> <LI>        <I><FONT color=#339900>//最的元素交换到未排序元素的最开?/FONT></I><BR> <LI>        swap(indexes,i,min);<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 双向冒排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] bidirectionalBubbleSort(<B><A ><FONT color=#ff0000><U>Comparable</U></FONT></A></B>[] objects) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> j;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> limit = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> start = -1;<BR> <LI>    <B><FONT color=#0000ff>while</FONT></B> (start < limit) {<BR> <LI>        start++;<BR> <LI>        limit--;<BR> <LI>        <B><FONT color=#0000ff>for</FONT></B> (j = start; j < limit; j++) {<BR> <LI>            <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[j]].compareTo(objects[indexes[j+1]]) > 0) {<BR> <LI>              swap(indexes,j,j+1);<BR> <LI>            }<BR> <LI>        }<BR> <LI>        <B><FONT color=#0000ff>for</FONT></B> (j = limit; --j >= start;) {<BR> <LI>          <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[j]].compareTo(objects[indexes[j+1]]) > 0) {<BR> <LI>            swap(indexes,j,j+1);<BR> <LI>          }<BR> <LI>        }<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 双向冒排序法排序?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param objects 排序对象</FONT></I><BR> <LI><I><FONT color=#339900>   * @param key 排序关键?/FONT></I><BR> <LI><I><FONT color=#339900>   * @return 按照升序排序后应该有的烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @since  0.6</FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>public</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>int</FONT></B>[] bidirectionalBubbleSort(<A ><FONT color=#ff0000><U>PropertyComparable</U></FONT></A>[] objects, <B><FONT color=#0000ff>int</FONT></B> key) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> <B><FONT color=#0000ff>length</FONT></B> = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B>[] indexes = <A ><FONT color=#ff0000><U>ArrayUtil</U></FONT></A>.getInitedIntArray(<B><FONT color=#0000ff>length</FONT></B>);<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> j;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> limit = objects.<B><FONT color=#0000ff>length</FONT></B>;<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> start = -1;<BR> <LI>    <B><FONT color=#0000ff>while</FONT></B> (start < limit) {<BR> <LI>        start++;<BR> <LI>        limit--;<BR> <LI>        <B><FONT color=#0000ff>for</FONT></B> (j = start; j < limit; j++) {<BR> <LI>            <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[j]].compareTo(objects[indexes[j+1]]) > 0) {<BR> <LI>              swap(indexes,j,j+1);<BR> <LI>            }<BR> <LI>        }<BR> <LI>        <B><FONT color=#0000ff>for</FONT></B> (j = limit; --j >= start;) {<BR> <LI>          <B><FONT color=#0000ff>if</FONT></B> (objects[indexes[j]].compareTo(objects[indexes[j+1]],key) > 0) {<BR> <LI>            swap(indexes,j,j+1);<BR> <LI>          }<BR> <LI>        }<BR> <LI>    }<BR> <LI>    <B><FONT color=#0000ff>return</FONT></B> indexes;<BR> <LI>  }<BR> <LI><BR> <LI>  <I><FONT color=#339900>/**</FONT></I><BR> <LI><I><FONT color=#339900>   * 交换两个元素的倹{?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param indexes 原烦引数l?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param i W一?/FONT></I><BR> <LI><I><FONT color=#339900>   * @param j W二?/FONT></I><BR> <LI><I><FONT color=#339900>   */</FONT></I><BR> <LI>  <B><FONT color=#0000ff>private</FONT></B> <B><FONT color=#0000ff>static</FONT></B> <B><FONT color=#0000ff>void</FONT></B> swap(<B><FONT color=#0000ff>int</FONT></B>[] indexes, <B><FONT color=#0000ff>int</FONT></B> i, <B><FONT color=#0000ff>int</FONT></B> j) {<BR> <LI>    <B><FONT color=#0000ff>int</FONT></B> tmp = indexes[i];<BR> <LI>    indexes[i] = indexes[j];<BR> <LI>    indexes[j] = tmp;<BR> <LI>  }<BR> <LI><BR> <LI>} <LI>------------------------------------------ <LI> <LI>冒排序Q? <LI> <P>1、比较相ȝ两个元素Q如果后面的比前面小Q就对调二者。反复比较,到最后两个元素。结果,最大值就跑到了最末位|?</P> <LI> <P>2、反复第一步,直到所有较大值都跑到靠后的位|?/P> <LI> <P>---------------------------------------------</P> <LI> <P>选择排序</P> <LI> <P>1、一开始整个数列是未排列的</P> <LI> <P>2、从未排列的CQ挑选出最的敎ͼ和未排列的数中的W一个元素互调,q将该最的数归cd已排序的序列中;</P> <LI> <P>3、重复第2步,直到所有的数都归类到已排序数列中?/P> <LI> <P>---------------------------------------------</P> <LI> <P>插入排序法:</P> <LI> <P>1、一开始只有第一个数在已排序数列中,其他的数归类到未排序数列中;</P> <LI> <P>2、将未排序的W一个数Q插入到已排序数列中Q得插入后的已排序数列仍然l持由小到大的顺序;</P> <LI> <P>3、重复步?Q直到所有的数都在已排序数列中?/P> <LI> <P>-----------------------------------------------</P> <LI></LI></OL><img src ="http://www.tkk7.com/fjpan2002/aggbug/22627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fjpan2002/" target="_blank">勇敢的心</a> 2005-12-05 20:24 <a href="http://www.tkk7.com/fjpan2002/articles/22627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试攉Q持l更斎ͼ-1 原脓~辑太慢?/title><link>http://www.tkk7.com/fjpan2002/articles/21680.html</link><dc:creator>勇敢的心</dc:creator><author>勇敢的心</author><pubDate>Mon, 28 Nov 2005 07:24:00 GMT</pubDate><guid>http://www.tkk7.com/fjpan2002/articles/21680.html</guid><wfw:comment>http://www.tkk7.com/fjpan2002/comments/21680.html</wfw:comment><comments>http://www.tkk7.com/fjpan2002/articles/21680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fjpan2002/comments/commentRss/21680.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fjpan2002/services/trackbacks/21680.html</trackback:ping><description><![CDATA[     摘要: 91、应用服务器与WEB SERVER的区别?通俗的讲QWeb服务器传?serves)面使浏览器可以览Q然而应用程序服务器提供的是客户端应用程序可以调?call)的方?methods)。确切一点,你可以说QWeb服务器专门处理HTTPh(request)Q但是应用程序服务器是通过很多协议来ؓ应用E序提供(serves)商业逻辑(business logic)?2、BS与CS的联pM?..  <a href='http://www.tkk7.com/fjpan2002/articles/21680.html'>阅读全文</a><img src ="http://www.tkk7.com/fjpan2002/aggbug/21680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fjpan2002/" target="_blank">勇敢的心</a> 2005-11-28 15:24 <a href="http://www.tkk7.com/fjpan2002/articles/21680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试攉Q持l更斎ͼhttp://www.tkk7.com/fjpan2002/articles/21654.html勇敢的心勇敢的心Mon, 28 Nov 2005 05:05:00 GMThttp://www.tkk7.com/fjpan2002/articles/21654.htmlhttp://www.tkk7.com/fjpan2002/comments/21654.htmlhttp://www.tkk7.com/fjpan2002/articles/21654.html#Feedback0http://www.tkk7.com/fjpan2002/comments/commentRss/21654.htmlhttp://www.tkk7.com/fjpan2002/services/trackbacks/21654.html阅读全文

勇敢的心 2005-11-28 13:05 发表评论
]]>
վ֩ģ壺 avһas| ԻȫƵ߹ۿ| һȫëƬ| ҹ˾Ʒɫ| ˳վ| AVպAV | ѹ˦Ƭ| ŷɫƵ߹ۿ| ޾Ʒ˽Ĺ| Ļ| þþþþѹۿ| һavĻ| ôӲˬƵ| ˳߲| ޹ӰԺ| þëƬѿһ| ղһ| 97Ƶ| AVɫ| ҹƬ69| 24Сʱձwwwѵ| ޾ƷƷ߹ۿ| 鶹ƷѹƬ| ޾Ʒŷ޾Ʒ| ɬɬƵ| ɫҳѹۿ| 99ȳ˾ƷȾþ| йһëƬѿƵ| þ99ڹ| 18ڵվ| ޾ǧ˾ղ| ޾ƷAVĻӰվ| ձ18| ձҺ| һaƬɫëƬ| ˿wwwƵ| ޳߲| ޹ӰԺ| һѹۿ| ޾Ʒר| AV˿߹ۿ|