锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜未满十八勿入,亚洲A∨精品一区二区三区下载,精品亚洲456在线播放http://www.tkk7.com/achan2bj/zh-cnSat, 10 May 2025 10:25:22 GMTSat, 10 May 2025 10:25:22 GMT60榪愮敤Jcaptcha鍋氶獙璇佺爜鎬葷粨 http://www.tkk7.com/achan2bj/archive/2012/10/18/389790.htmlachan2bjachan2bjThu, 18 Oct 2012 02:16:00 GMThttp://www.tkk7.com/achan2bj/archive/2012/10/18/389790.htmlhttp://www.tkk7.com/achan2bj/comments/389790.htmlhttp://www.tkk7.com/achan2bj/archive/2012/10/18/389790.html#Feedback2http://www.tkk7.com/achan2bj/comments/commentRss/389790.htmlhttp://www.tkk7.com/achan2bj/services/trackbacks/389790.htmlhttp://my.oschina.net/jawava/blog/8574

鍙戠幇榪欎釜紺懼尯涓嶉敊錛屾墍浠ヤ篃鍑戜釜鐑椆銆?/p>

絎竴綃囨棩蹇楋紝涓瀹氳鍔ㄦ墜鍐欐墠鏈夎瘹鎰忋?/p> 榪欎袱澶╄緇欏垰鍋氱殑澶栫綉緋葷粺鐧誨綍欏甸潰鍔犻獙璇佺爜錛屼互鍓嶆病鍋氳繃銆備笂緗戞悳浜?jiǎn)涓涓嬶紝璧勬枡寰堝銆?br style="padding: 0px; margin: 0px;" />楠岃瘉鐮佹牎楠岀О浣渃aptcha錛?br style="padding: 0px; margin: 0px;" />Completely Automated Public Test to tell Computers and Humans Apart
涓撲笟鐐瑰効鐨勭炕璇戞槸錛氬叏鑷姩鍖哄垎璁$畻鏈哄拰浜虹被鐨勫浘鐏墊祴璇曘?br style="padding: 0px; margin: 0px;" />CAPTCHA鐨勭洰鐨勫緢鏄庣‘錛屽氨鏄尯鍒嗚綆楁満鍜屼漢綾葷殑涓縐嶇▼搴忕畻娉曪紝
榪欑紼嬪簭蹇呴』鑳界敓鎴愬茍璇勪環(huán)浜虹被鑳藉緢瀹規(guī)槗閫氳繃浣嗚綆楁満鍗撮氫笉榪囩殑嫻嬭瘯銆?br style="padding: 0px; margin: 0px;" />
緗戜笂鑳芥煡鍒頒笉灝戝疄鐜版柟妗堬紝綆鍗曠殑鍐欎釜jsp灝辮浜?jiǎn)锛屾妧鏈惈閲忎笉楂樸傛悳浜?jiǎn)涓鍦堝悗錛?br style="padding: 0px; margin: 0px;" />鎰熻榪樻槸鐢ㄤ釜姝h鐐瑰効姣旇緝鍚堥傦紝鐒跺悗灝遍攣瀹氫簡(jiǎn)JCaptcha錛屽埌鍏跺畼鏂圭綉绔欎笂鐪嬩簡(jiǎn)鐪嬶細(xì)
http://jcaptcha.octo.com/confluence/display/general/Home

JCaptcha鎻愪緵浜?br style="padding: 0px; margin: 0px;" />Provide robust and reliable CAPTCHA implementation framework for JAVA
Provide accessible CAPTCHA implementations
Provide multi-type challenge (text, sound, image)

瀹冪敤涓婄櫨涓被鏉ュ疄鐜頒簡(jiǎn)濡傛綆鍗曠殑鍔熻兘錛岃繖鏄負(fù)浠涔堝憿錛熷畼鏂圭粰鐨勮В閲婃槸
1銆佸鏈晫鑳戒笉鏂殑鍙戞槑錛堟垨鍙戠幇錛変竴浜涗漢綾誨鏄撳鐞嗚屾満鍣ㄤ笉鑳藉緢濂藉鐞嗙殑闂銆?br style="padding: 0px; margin: 0px;" />JCaptcha楂樺眿寤虹摯鐨勭粰鍑轟簡(jiǎn)涓縐嶉氱敤鐨勫畾涔夊拰琛ㄨ揪榪欑闂騫剁敤浜庤瘑鍒殑鏂規(guī)銆?br style="padding: 0px; margin: 0px;" />涔熷氨鏄瘑鍒柟妗堢殑鍙墿灞曟с?br style="padding: 0px; margin: 0px;" />2銆佸疄鐜頒簡(jiǎn)鑻ュ共寮曟搸鍜岀粍浠訛紝閫氳繃閰嶇疆榪欎簺寮曟搸鍜岀粍浠訛紝鍙互鏂逛究鐨勪慨鏀硅嚜宸辯▼搴?br style="padding: 0px; margin: 0px;" />captcha鏋勪歡鐨勭畻娉曘傝繖鏍鳳紝鍦ㄦ姷寰℃伓鎰忚闂椂錛屽彲浠ヤ笉鐢ㄦ敼鍙樹唬鐮侊紝鐏墊椿蹇熺殑
鏀瑰彉captcha絳栫暐錛屼粠鑰屾洿濂界殑淇濇姢緋葷粺銆?br style="padding: 0px; margin: 0px;" />
涓漢瑙夌殑璇寸殑鎸哄ソ錛岀涓鐐瑰浜庢垜浠潵璇村掓槸嬈¤鐨勶紝涓昏絎簩鐐規(guī)瘮杈冩湁鎰忎箟銆?br style="padding: 0px; margin: 0px;" />鐒跺悗灝辮瘯浜?jiǎn)璇曘備笅闈㈡槸鍏蜂綋闇瑕佸仛鐨勫伐浣滐細(xì)

涓錛屼粠瀹樼綉涓婁笅涓猨captcha-1.0-all.jar錛屽姞鍏ュ埌欏圭洰涓紝
瀹樻柟鐨?.0榪樻病鏈夋寮忕増錛屾墍浠ュ厛鐢?.0鍚с?br style="padding: 0px; margin: 0px;" />
浜岋紝瀹樼綉涓婁粙緇嶄簡(jiǎn)鍑犵鍜岄」鐩粨鍚堢殑鍏蜂綋鏂規(guī)錛屾渶綆鍗曠殑鏂瑰紡寰堝揩璧伴氾紝鍥劇墖寰堥毦鐪嬶紝
鑰屼笖涓嶅叿鏈夊彲閰嶇疆鎬э紝鑲畾涓嶈銆傛墍浠ラ夋嫨閫氳繃spring鏉ユ暣鍚堢殑鏂瑰紡錛?br style="padding: 0px; margin: 0px;" />spring鏄暣鍚堝拰閰嶇疆鐨勫鉤鍙幫紝鎶妀captcha鐨勬湇鍔″拰寮曟搸榪樻湁緇勪歡閰嶇疆鎴恠pring鐨刡ean銆?br style="padding: 0px; margin: 0px;" />紺轟緥濡備笅錛?br style="padding: 0px; margin: 0px;" />
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
<beans  default-autowire="byName">

    <bean id="captchaServlet" class="com.jawava.XXXX.XXX.TopImageCaptchaServlet" />

<bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
<description>楠岃瘉鐮佹湇鍔?lt;/description>
<constructor-arg index="0"><ref bean="imageEngine"/></constructor-arg>
<constructor-arg index="1"><value>300</value></constructor-arg><!--瓚呮椂鏃墮棿 縐?->
<constructor-arg index="2"><value>20000</value></constructor-arg><!--鏈澶у茍鍙戞暟-->
<constructor-arg index="3"><value>20000</value></constructor-arg>& lt;!--絎洓涓弬鏁板畼緗戠ず渚嬩笂娌℃湁緇欏嚭錛屼細(xì)鎶ラ敊錛屽悗鏉ョ湅浜?jiǎn)API鎵嶇煡閬撳皯浜?jiǎn)涓弬鏁?->
</bean>

<bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">
<description>鍥劇墖寮曟搸</description>
<constructor-arg index="0">
<list>
<ref bean="CaptchaFactory"/>
</list>
</constructor-arg>
</bean>

<bean id="CaptchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory" >
<description>楠岃瘉鐮佸伐鍘?lt;/description>
<constructor-arg><ref bean="wordgen"/></constructor-arg>
<constructor-arg><ref bean="wordtoimage"/></constructor-arg>
</bean>

<bean id="wordgen" class= "com.octo.captcha.component.word.wordgenerator.RandomWordGenerator" >
<description>鏂囧瓧浜х敓鍣紝鎻愪緵浜?jiǎn)濂藉嚑绉嶅疄鐜板Q岀粡榪囨瘮杈冮夌敤浜?jiǎn)杩櫩U?lt;/description>
<constructor-arg index="0"><value>0123456789</value></constructor-arg>
</bean>

<bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage" >
<description>鍥劇墖鐢熸垚鍣?lt;/description>
<constructor-arg index="0"><ref bean="fontGenRandom"/></constructor-arg>
<constructor-arg index="1"><ref bean="backGenUni"/></constructor-arg>
<constructor-arg index="2"><ref bean="simpleWhitePaster"/></constructor-arg>
</bean>

<bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator" >
<description>鏂囧瓧杞崲鍥劇墖</description>
<constructor-arg index="0"><value>20</value></constructor-arg><!--瀛椾綋鏈灝忓昂瀵?->
<constructor-arg index="1"><value>20</value></constructor-arg><!--瀛椾綋鏈澶у昂瀵?->
</bean> 

<bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.GradientBackgroundGenerator" >
<constructor-arg index="0"><value>62</value></constructor-arg><!--鑳屾櫙鍥劇墖瀹藉害-->
<constructor-arg index="1"><value>22</value></constructor-arg><!--鑳屾櫙鍥劇墖楂樺害-->
<constructor-arg type="java.awt.Color" index="2">
<ref bean="colorGrey"/>
</constructor-arg> 
<constructor-arg type="java.awt.Color" index="3">
<ref bean="colorGreen"/>
</constructor-arg>

</bean>

<bean id="simpleWhitePaster" class="com.octo.captcha.component.image.textpaster.SimpleTextPaster" >
<constructor-arg type="java.lang.Integer" index="0">
<value>4</value><!--瀛楃鏈灝戜釜鏁?->
</constructor-arg>
<constructor-arg type="java.lang.Integer" index="1">
<value>4</value><!--瀛楃鏈澶氫釜鏁?->
</constructor-arg>
<constructor-arg type="java.awt.Color" index="2">
<ref bean="colorFont"/>
</constructor-arg>
</bean>

<bean id="colorGrey" class="java.awt.Color" >
<constructor-arg index="0"><value>200</value></constructor-arg>
<constructor-arg index="1"><value>255</value></constructor-arg>
<constructor-arg index="2"><value>200</value></constructor-arg>
</bean>
<bean id="colorGreen" class="java.awt.Color" >
<constructor-arg index="0"><value>110</value></constructor-arg>
<constructor-arg index="1"><value>120</value></constructor-arg>
<constructor-arg index="2"><value>200</value></constructor-arg>
</bean>
<bean id="colorFont" class="java.awt.Color" >
<constructor-arg index="0"><value>60</value></constructor-arg>
<constructor-arg index="1"><value>60</value></constructor-arg>
<constructor-arg index="2"><value>60</value></constructor-arg>
</bean>
</beans>



榪欓噷闈㈠叿浣撶敤鍝釜component,闇瑕佺湅ApI錛屾垜鎶婂寘閲屾彁渚涚殑鐜版垚鐨勭粍浠跺熀鏈笂璇曚簡(jiǎn)澶у崐錛?br style="padding: 0px; margin: 0px;" />鏈鍚庨夋嫨浜?jiǎn)濡備笂鐨勯厤缃Q岄夋嫨鐨勬爣鍑嗕竴鏄編瑙傦紝浜屾槸璇嗗埆鐜囥傝瘑鍒巼澶綆浜?jiǎn)锛岀敤鎴蜂綋楠屼細(xì)涓嬮檷銆?br style="padding: 0px; margin: 0px;" />
涓夈侀厤緗ソ鍚庯紝JCaptcha榪欒竟鐨勫伐浣滃氨瀹屾垚浜?jiǎn)銆備笅闈㈠氨鏄拰欏圭洰鐨勭粨鍚堛?br style="padding: 0px; margin: 0px;" />1銆侀鍏堜笓闂ㄥ啓涓狢aptcahServlet鐢ㄦ潵鑾峰彇楠岃瘉鐮侊紝鐢變簬瑕佸湪servlet閲屾敞鍏pring鐨刡ean錛?br style="padding: 0px; margin: 0px;" />鎵浠ョ敤浜?jiǎn)浠g悊鐨勬柟寮忋備唬鐞嗙被緗戜笂鏈夛紝閮芥槸鍥哄畾鍐欐硶錛岃繖閲屽氨涓嶈創(chuàng)浜?jiǎn)銆?br style="padding: 0px; margin: 0px;" />CaptcahServlet涓昏閮ㄥ垎濡備笅錛?br style="padding: 0px; margin: 0px;" />
@Override
public void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException, RuntimeException {

byte[] captchaChallengeAsJpeg = null;
//杈撳嚭jpg鐨勫瓧鑺傛祦
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try {
// get the session id that will identify the generated captcha.
//the same id must be used to validate the response, the session id is a good candidate!
String captchaId = httpServletRequest.getSession().getId();
// call the ImageCaptchaService getChallenge method
BufferedImage challenge =
(BufferedImage) captchaService.getChallengeForID(captchaId,
            httpServletRequest.getLocale());

// a jpeg encoder
    JPEGImageEncoder jpegEncoder =
            JPEGCodec.createJPEGEncoder(jpegOutputStream);
    jpegEncoder.encode(challenge);

} catch (IllegalArgumentException e) {
    httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
    return;
} catch (CaptchaServiceException e) {
    httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    return;
}

captchaChallengeAsJpeg = jpegOutputStream.toByteArray();

// flush it in the response
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream =
        httpServletResponse.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
    }



鐒跺悗鍦╳eb.xml閰嶇疆錛?br style="padding: 0px; margin: 0px;" />
<servlet>
<servlet-name>CaptchaProxy</servlet-name>
<servlet-class>com.jawava.XXXXX.XXX.TopHttpServletProxy</servlet-class>
<init-param>
<param-name>targetServlet</param-name>
<param-value>captchaServlet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CaptchaProxy</servlet-name>
<url-pattern>/topJcaptcha</url-pattern>
</servlet-mapping>



2銆佺洰鍓嶉」鐩殑鐧誨綍欏甸潰鏄痡sp錛岀粨鍚堝緢鏂逛究錛屽湪鍘熸湁欏甸潰涓婂姞涓?br style="padding: 0px; margin: 0px;" /><img src="/topJcaptcha" /> <input type="text" name="jcaptcha" value="" />
閭d釜img灝辨槸鏍¢獙鐮併?br style="padding: 0px; margin: 0px;" />闇瑕佺殑璇濓紝鍐嶅姞涓婁釜鎹㈠浘鐗囩殑鍔熻兘錛屽緢綆鍗曘?br style="padding: 0px; margin: 0px;" />
3銆侀獙璇佺幆鑺傘傛垜鏄湪鍘熸潵鐨勯獙璇佺敤鎴峰瘑鐮佺殑閫昏緫鍓嶏紝鍔犱笂浜?jiǎn)楠岃瘉鐮佺殑鏍¢獙閫昏緫銆?br style="padding: 0px; margin: 0px;" />寰堢畝鍗曠殑鍑犲彞璇濓紝浠g爜濡備笅錛?br style="padding: 0px; margin: 0px;" />
Boolean isResponseCorrect =Boolean.FALSE;
        //闇瑕乻essionId 鏉ラ獙璇佹牎楠岀爜
        String sessionId = request.getSession().getId();
//棣栧厛鏍¢獙楠岃瘉鐮?br style="padding: 0px; margin: 0px;" />        try {
            isResponseCorrect = captchaService.validateResponseForID(sessionId,
             captcha_input);
            if(!isResponseCorrect) {
             throw new RuntimeException("杈撳叆鐨勯獙璇佺爜鏈夎錛岃閲嶆柊杈撳叆");
            }
        } catch (CaptchaServiceException e) {
             //should not happen, may be thrown if the id is not valid
         throw new RuntimeException("鏍¢獙楠岃瘉鐮佹椂鍑虹幇涓嶆槑閿欒",e);
        }



鍥涖佸姝ゅ氨鍙互嫻嬭瘯浜?jiǎn)銆傞氳繃鍙嶅璋冩暣鍙傛暟錛岃揪鍒頒簡(jiǎn)姣旇緝緹庤鐨勬晥鏋滐紝浣嗘槸鏂囧瓧濮嬬粓
涓嶅湪鍥劇墖鐨勬涓紝鑰屾槸闈犱笂錛岀敋鑷抽兘鎶婃枃瀛楁帺鐩栦簡(jiǎn)涓鍗娿傜炕鐪嬩簡(jiǎn)鍗婂ぉAPI錛屼篃鐪嬩笉鍑?br style="padding: 0px; margin: 0px;" />涓鍊傚彧濂藉幓緲繪簮浠g爜浜?jiǎn)銆傞棶棰樺嚭鍦?br style="padding: 0px; margin: 0px;" />com.octo.captcha.component.image.textpaster.SimpleTextPaster榪欎釜綾伙紝瀹冩妸鏂囧瓧
鍥劇墖寰鑳屾櫙鍥劇墖鏀炬椂錛屾妸鏂囧瓧鐨勪綅緗斁鍦ㄤ簡(jiǎn)鑳屾櫙鍥劇墖涓鍗婄殑楂樺害涓婏紝榪欏氨鏄棶棰樻墍鍦ㄣ?br style="padding: 0px; margin: 0px;" />淇敼浠g爜閲嶆柊鎵撲簡(jiǎn)涓猨ar鍖呫傛浛鎹竴涓嬶紝閲嶅惎鍚庝竴鍒噊k銆?/div>

achan2bj 2012-10-18 10:16 鍙戣〃璇勮
]]>ArrayList鍜孷ector鐨勬瘮杈冦愯漿銆?/title><link>http://www.tkk7.com/achan2bj/archive/2012/09/29/388819.html</link><dc:creator>achan2bj</dc:creator><author>achan2bj</author><pubDate>Sat, 29 Sep 2012 01:38:00 GMT</pubDate><guid>http://www.tkk7.com/achan2bj/archive/2012/09/29/388819.html</guid><description><![CDATA[<p><strong>Vector 榪樻槸ArrayList――鍝竴涓洿濂斤紝涓轟粈涔堬紵</strong></p><p><strong><br /></strong>瑕佸洖絳旇繖涓棶棰樹笉鑳戒竴姒傝岃錛屾湁鏃跺欎嬌鐢╒ector姣旇緝濂斤紱鏈夋椂鏄疉rrayList錛屾湁鏃跺欒繖涓や釜閮戒笉鏄?nbsp; </p><p>鏈濂界殑閫夋嫨銆備綘鍒寚鏈涜兘澶熻幏寰椾竴涓畝鍗曡偗瀹氱瓟妗堬紝鍥犱負(fù)榪欒鐪嬩綘鐢ㄥ畠浠共浠涔堛備笅闈㈡湁4涓鑰冭檻  </p><p>鐨勫洜绱狅細(xì)  </p><p>l API  </p><p>l 鍚屾澶勭悊  </p><p>l 鏁版嵁澧為暱鎬?nbsp; </p><p>l 浣跨敤妯″紡  </p><p>涓嬮潰閽堝榪?涓柟闈㈣繘琛屼竴涓鎺㈣  </p><p><strong>API </strong> </p><p>鍦ㄧ敱Ken Arnold絳夌紪钁楃殑銆奐ava Programming Language銆?Addison-Wesley, June 2000)涓涔︿腑鏈夎繖  </p><p>鏍風(fēng)殑鎻忚堪錛孷ector綾諱技浜嶢rrayList.銆傛墍鏈変粠API鐨勮搴︽潵鐪嬭繖涓や釜綾婚潪甯哥浉[b]浼箋備絾浠栦滑涔嬮棿涔熻繕  </p><p>鏄湁涓浜涗富瑕佺殑鍖哄埆鐨勩?br /><strong>鍚屾鎬?/strong></p><p>Vector鏄悓姝ョ殑銆傝繖涓被涓殑涓浜涙柟娉曚繚璇佷簡(jiǎn)Vector涓殑瀵硅薄鏄嚎紼嬪畨鍏ㄧ殑銆傝孉rrayList鍒欐槸寮傛  </p><p>鐨勶紝鍥犳ArrayList涓殑瀵硅薄騫朵笉鏄嚎紼嬪畨鍏ㄧ殑銆傚洜涓哄悓姝ョ殑瑕佹眰浼?xì)濯?jiǎng)鍝嶆墽琛岀殑鏁堢巼錛屾墍浠ュ鏋滀綘涓?nbsp; </p><p>闇瑕佺嚎紼嬪畨鍏ㄧ殑闆嗗悎閭d箞浣跨敤ArrayList鏄竴涓緢濂界殑閫夋嫨錛岃繖鏍峰彲浠ラ伩鍏嶇敱浜庡悓姝ュ甫鏉ョ殑涓嶅繀瑕佺殑  </p><p>鎬ц兘寮閿銆?nbsp; </p><p><strong>鏁版嵁澧為暱</strong></p><p>浠庡唴閮ㄥ疄鐜版満鍒舵潵璁睞rrayList鍜孷ector閮芥槸浣跨敤鏁扮粍(Array)鏉ユ帶鍒墮泦鍚堜腑鐨勫璞°傚綋浣犲悜榪欎袱縐嶇被  </p><p>鍨嬩腑澧炲姞鍏冪礌鐨勬椂鍊欙紝濡傛灉鍏冪礌鐨勬暟鐩秴鍑轟簡(jiǎn)鍐呴儴鏁扮粍鐩墠鐨勯暱搴﹀畠浠兘闇瑕佹墿灞曞唴閮ㄦ暟緇勭殑闀垮害錛?nbsp; </p><p>Vector緙虹渷鎯呭喌涓嬭嚜鍔ㄥ闀垮師鏉ヤ竴鍊嶇殑鏁扮粍闀垮害錛孉rrayList鏄師鏉ョ殑50%,鎵浠ユ渶鍚庝綘鑾峰緱鐨勮繖涓泦  </p><p>鍚堟墍鍗犵殑絀洪棿鎬繪槸姣斾綘瀹為檯闇瑕佺殑瑕佸ぇ銆傛墍浠ュ鏋滀綘瑕佸湪闆嗗悎涓繚瀛樺ぇ閲忕殑鏁版嵁閭d箞浣跨敤Vector鏈変竴  </p><p>浜涗紭鍔匡紝鍥犱負(fù)浣犲彲浠ラ氳繃璁劇疆闆嗗悎鐨勫垵濮嬪寲澶у皬鏉ラ伩鍏嶄笉蹇呰鐨勮祫婧愬紑閿銆?nbsp; </p><p><strong>浣跨敤妯″紡</strong></p><p>鍦ˋrrayList鍜孷ector涓紝浠庝竴涓寚瀹氱殑浣嶇疆錛堥氳繃绱㈠紩錛夋煡鎵炬暟鎹垨鏄湪闆嗗悎鐨勬湯灝懼鍔犮佺Щ闄や竴  </p><p>涓厓绱犳墍鑺辮垂鐨勬椂闂存槸涓鏍風(fēng)殑錛岃繖涓椂闂存垜浠敤O(1)琛ㄧず銆備絾鏄紝濡傛灉鍦ㄩ泦鍚堢殑鍏朵粬浣嶇疆澧炲姞鎴栫Щ闄?nbsp; </p><p>鍏冪礌閭d箞鑺辮垂鐨勬椂闂翠細(xì)鍛堢嚎褰㈠闀匡細(xì)O(n-i)錛屽叾涓璶浠h〃闆嗗悎涓厓绱犵殑涓暟錛宨浠h〃鍏冪礌澧炲姞鎴栫Щ闄ゅ厓  </p><p>绱犵殑绱㈠紩浣嶇疆銆備負(fù)浠涔堜細(xì)榪欐牱鍛紵浠ヤ負(fù)鍦ㄨ繘琛屼笂榪版搷浣滅殑鏃跺欓泦鍚堜腑絎琲鍜岀i涓厓绱犱箣鍚庣殑鎵鏈夊厓绱?nbsp; </p><p>閮借鎵ц浣嶇Щ鐨勬搷浣溿傝繖涓鍒囨剰鍛崇潃浠涔堝憿錛?nbsp; </p><p>榪欐剰鍛崇潃錛屼綘鍙槸鏌ユ壘鐗瑰畾浣嶇疆鐨勫厓绱犳垨鍙湪闆嗗悎鐨勬湯绔鍔犮佺Щ闄ゅ厓绱狅紝閭d箞浣跨敤Vector鎴?nbsp; </p><p>ArrayList閮藉彲浠ャ傚鏋滄槸鍏朵粬鎿嶄綔錛屼綘鏈濂介夋嫨鍏朵粬鐨勯泦鍚堟搷浣滅被銆傛瘮濡傦紝LinkList闆嗗悎綾誨湪澧炲姞  </p><p>鎴栫Щ闄ら泦鍚堜腑浠諱綍浣嶇疆鐨勫厓绱犳墍鑺辮垂鐨勬椂闂撮兘鏄竴鏍風(fēng)殑—O(1)錛屼絾瀹冨湪绱㈠紩涓涓厓绱犵殑浣跨敤緙烘瘮杈冩參  </p><p>錛峅(i),鍏朵腑i鏄儲(chǔ)寮曠殑浣嶇疆.浣跨敤ArrayList涔熷緢瀹規(guī)槗錛屽洜涓轟綘鍙互綆鍗曠殑浣跨敤绱㈠紩鏉ヤ唬鏇垮垱寤?nbsp; </p><p>iterator瀵硅薄鐨勬搷浣溿侺inkList涔熶細(xì)涓烘瘡涓彃鍏ョ殑鍏冪礌鍒涘緩瀵硅薄錛屾墍鏈変綘瑕佹槑鐧藉畠涔熶細(xì)甯︽潵棰濆鐨勫紑  </p><p>閿銆?nbsp; </p><p>鏈鍚庯紝鍦ㄣ奝ractical Java銆嬩竴涔︿腑Peter Haggar寤鴻浣跨敤涓涓畝鍗曠殑鏁扮粍錛圓rray錛夋潵浠f浛Vector  </p><p>鎴朅rrayList銆傚挨鍏舵槸瀵逛簬鎵ц鏁堢巼瑕佹眰楂樼殑紼嬪簭鏇村簲濡傛銆傚洜涓轟嬌鐢ㄦ暟緇?Array)閬垮厤浜?jiǎn)鍚屾銆侀澶?nbsp; </p><p>鐨勬柟娉曡皟鐢ㄥ拰涓嶅繀瑕佺殑閲嶆柊鍒嗛厤絀洪棿鐨勬搷浣溿?/p><img src ="http://www.tkk7.com/achan2bj/aggbug/388819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/achan2bj/" target="_blank">achan2bj</a> 2012-09-29 09:38 <a href="http://www.tkk7.com/achan2bj/archive/2012/09/29/388819.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>java闈㈣瘯棰樺強(qiáng)絳旀錛堝熀紜棰?22閬擄紝浠g爜棰?9閬擄級(jí) [杞琞http://www.tkk7.com/achan2bj/archive/2012/09/29/388818.htmlachan2bjachan2bjSat, 29 Sep 2012 01:31:00 GMThttp://www.tkk7.com/achan2bj/archive/2012/09/29/388818.html闃呰鍏ㄦ枃

achan2bj 2012-09-29 09:31 鍙戣〃璇勮
]]>
JAVA鐨勫綰跨▼瀹炵幇http://www.tkk7.com/achan2bj/archive/2012/09/24/388422.htmlachan2bjachan2bjMon, 24 Sep 2012 03:18:00 GMThttp://www.tkk7.com/achan2bj/archive/2012/09/24/388422.html1.JAVA澶氱嚎紼嬪疄鐜版柟寮?br />JAVA澶氱嚎紼嬪疄鐜版柟寮忎富瑕佹湁涓夌錛氱戶鎵縏hread綾匯佸疄鐜癛unnable鎺ュ彛銆佷嬌鐢‥xecutorService銆丆allable銆丗uture瀹炵幇鏈夎繑鍥炵粨鏋滅殑澶氱嚎紼嬨傚叾涓墠涓ょ鏂瑰紡綰跨▼鎵ц瀹屽悗閮芥病鏈夎繑鍥炲鹼紝鍙湁鏈鍚庝竴縐嶆槸甯﹁繑鍥炲肩殑銆?p>2.緇ф壙Thread綾誨疄鐜板綰跨▼
緇ф壙Thread綾葷殑鏂規(guī)硶灝界琚垜鍒椾負(fù)涓縐嶅綰跨▼瀹炵幇鏂瑰紡錛屼絾Thread鏈川涓婁篃鏄疄鐜頒簡(jiǎn)Runnable鎺ュ彛鐨勪竴涓疄渚嬶紝瀹冧唬琛ㄤ竴涓嚎紼嬬殑瀹炰緥錛屽茍涓旓紝鍚姩綰跨▼鐨勫敮涓鏂規(guī)硶灝辨槸閫氳繃Thread綾葷殑start()瀹炰緥鏂規(guī)硶銆俿tart()鏂規(guī)硶鏄竴涓猲ative鏂規(guī)硶錛屽畠?yōu)畣鍚姩涓涓柊綰跨▼錛屽茍鎵цrun()鏂規(guī)硶銆傝繖縐嶆柟寮忓疄鐜板綰跨▼寰堢畝鍗曪紝閫氳繃鑷繁鐨勭被鐩存帴extend Thread錛屽茍澶嶅啓run()鏂規(guī)硶錛屽氨鍙互鍚姩鏂扮嚎紼嬪茍鎵ц鑷繁瀹氫箟鐨剅un()鏂規(guī)硶銆備緥濡傦細(xì)
public class MyThread extends Thread {
銆銆public void run() {
銆銆 System.out.println("MyThread.run()");
銆銆}
}
鍦ㄥ悎閫傜殑鍦版柟鍚姩綰跨▼濡備笅錛?br />MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();

3.瀹炵幇Runnable鎺ュ彛鏂瑰紡瀹炵幇澶氱嚎紼?br />濡傛灉鑷繁鐨勭被宸茬粡extends鍙︿竴涓被錛屽氨鏃犳硶鐩存帴extends Thread錛屾鏃訛紝蹇呴』瀹炵幇涓涓猂unnable鎺ュ彛錛屽涓嬶細(xì)
public class MyThread extends OtherClass implements Runnable {
銆銆public void run() {
銆銆 System.out.println("MyThread.run()");
銆銆}
}
涓轟簡(jiǎn)鍚姩MyThread錛岄渶瑕侀鍏堝疄渚嬪寲涓涓猅hread錛屽茍浼犲叆鑷繁鐨凪yThread瀹炰緥錛?br />MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
浜嬪疄涓婏紝褰撲紶鍏ヤ竴涓猂unnable target鍙傛暟緇橳hread鍚庯紝Thread鐨剅un()鏂規(guī)硶灝變細(xì)璋冪敤target.run()錛屽弬鑰僇DK婧愪唬鐮侊細(xì)
public void run() {
銆銆if (target != null) {
銆銆 target.run();
銆銆}
}

4.浣跨敤ExecutorService銆丆allable銆丗uture瀹炵幇鏈夎繑鍥炵粨鏋滅殑澶氱嚎紼?/strong>
ExecutorService銆丆allable銆丗uture榪欎釜瀵硅薄瀹為檯涓婇兘鏄睘浜嶦xecutor妗嗘灦涓殑鍔熻兘綾匯傛兂瑕佽緇嗕簡(jiǎn)瑙xecutor妗嗘灦鐨勫彲浠ヨ闂?a >http://www.javaeye.com/topic/366591 錛岃繖閲岄潰瀵硅妗嗘灦鍋氫簡(jiǎn)寰堣緇嗙殑瑙i噴銆傝繑鍥炵粨鏋滅殑綰跨▼鏄湪JDK1.5涓紩鍏ョ殑鏂扮壒寰侊紝紜疄寰堝疄鐢紝鏈変簡(jiǎn)榪欑鐗瑰緛鎴戝氨涓嶉渶瑕佸啀涓轟簡(jiǎn)寰楀埌榪斿洖鍊艱屽ぇ璐瑰懆鎶樹簡(jiǎn)錛岃屼笖鍗充究瀹炵幇浜?jiǎn)涔熷彲鑳芥紡娲炵檻謬恒?br />鍙繑鍥炲肩殑浠誨姟蹇呴』瀹炵幇Callable鎺ュ彛錛岀被浼肩殑錛屾棤榪斿洖鍊肩殑浠誨姟蹇呴』Runnable鎺ュ彛銆傛墽琛孋allable浠誨姟鍚庯紝鍙互鑾峰彇涓涓狥uture鐨勫璞★紝鍦ㄨ瀵硅薄涓婅皟鐢╣et灝卞彲浠ヨ幏鍙栧埌Callable浠誨姟榪斿洖鐨凮bject浜?jiǎn)锛屽啀缁撳悎绾拷E嬫睜鎺ュ彛ExecutorService灝卞彲浠ュ疄鐜頒紶璇翠腑鏈夎繑鍥炵粨鏋滅殑澶氱嚎紼嬩簡(jiǎn)銆備笅闈㈡彁渚涗簡(jiǎn)涓涓畬鏁寸殑鏈夎繑鍥炵粨鏋滅殑澶氱嚎紼嬫祴璇曚緥瀛愶紝鍦↗DK1.5涓嬮獙璇佽繃娌¢棶棰樺彲浠ョ洿鎺ヤ嬌鐢ㄣ備唬鐮佸涓嬶細(xì)

import java.util.concurrent.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;

/**
* Java綰跨▼錛氭湁榪斿洖鍊肩殑綰跨▼
*
* @author wb_qiuquan.ying
*/
@SuppressWarnings("unchecked")
public class Test {
public static void main(String[] args) throws ExecutionException,
    InterruptedException {
   System.out.println("----紼嬪簭寮濮嬭繍琛?---");
   Date date1 = new Date();

   int taskSize = 5;
   // 鍒涘緩涓涓嚎紼嬫睜
   ExecutorService pool = Executors.newFixedThreadPool(taskSize);
   // 鍒涘緩澶氫釜鏈夎繑鍥炲肩殑浠誨姟
   List<Future> list = new ArrayList<Future>();
   for (int i = 0; i < taskSize; i++) {
    Callable c = new MyCallable(i + " ");
    // 鎵ц浠誨姟騫惰幏鍙朏uture瀵硅薄
    Future f = pool.submit(c);
    // System.out.println(">>>" + f.get().toString());
    list.add(f);
   }
   // 鍏抽棴綰跨▼姹?br />   pool.shutdown();

   // 鑾峰彇鎵鏈夊茍鍙戜換鍔$殑榪愯緇撴灉
   for (Future f : list) {
    // 浠嶧uture瀵硅薄涓婅幏鍙栦換鍔$殑榪斿洖鍊鹼紝騫惰緭鍑哄埌鎺у埗鍙?br />    System.out.println(">>>" + f.get().toString());
   }

   Date date2 = new Date();
   System.out.println("----紼嬪簭緇撴潫榪愯----錛岀▼搴忚繍琛屾椂闂淬?
     + (date2.getTime() - date1.getTime()) + "姣銆?);
}
}

class MyCallable implements Callable<Object> {
private String taskNum;

MyCallable(String taskNum) {
   this.taskNum = taskNum;
}

public Object call() throws Exception {
   System.out.println(">>>" + taskNum + "浠誨姟鍚姩");
   Date dateTmp1 = new Date();
   Thread.sleep(1000);
   Date dateTmp2 = new Date();
   long time = dateTmp2.getTime() - dateTmp1.getTime();
   System.out.println(">>>" + taskNum + "浠誨姟緇堟");
   return taskNum + "浠誨姟榪斿洖榪愯緇撴灉,褰撳墠浠誨姟鏃墮棿銆? + time + "姣銆?;
}
}


浠g爜璇存槑錛?br />涓婅堪浠g爜涓璄xecutors綾伙紝鎻愪緵浜?jiǎn)涓緋誨垪宸ュ巶鏂規(guī)硶鐢ㄤ簬鍒涘厛綰跨▼姹狅紝榪斿洖鐨勭嚎紼嬫睜閮藉疄鐜頒簡(jiǎn)ExecutorService鎺ュ彛銆?br />public static ExecutorService newFixedThreadPool(int nThreads)
鍒涘緩鍥哄畾鏁扮洰綰跨▼鐨勭嚎紼嬫睜銆?br />public static ExecutorService newCachedThreadPool()
鍒涘緩涓涓彲緙撳瓨鐨勭嚎紼嬫睜錛岃皟鐢╡xecute 灝嗛噸鐢ㄤ互鍓嶆瀯閫犵殑綰跨▼錛堝鏋滅嚎紼嬪彲鐢級(jí)銆傚鏋滅幇鏈夌嚎紼嬫病鏈夊彲鐢ㄧ殑錛屽垯鍒涘緩涓涓柊綰跨▼騫舵坊鍔犲埌姹犱腑銆傜粓姝㈠茍浠庣紦瀛樹腑縐婚櫎閭d簺宸叉湁 60 縐掗挓鏈浣跨敤鐨勭嚎紼嬨?br />public static ExecutorService newSingleThreadExecutor()
鍒涘緩涓涓崟綰跨▼鍖栫殑Executor銆?br />public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
鍒涘緩涓涓敮鎸佸畾鏃跺強(qiáng)鍛ㄦ湡鎬х殑浠誨姟鎵ц鐨勭嚎紼嬫睜錛屽鏁版儏鍐典笅鍙敤鏉ユ浛浠imer綾匯?/p>

ExecutoreService鎻愪緵浜?jiǎn)submit()鏂規(guī)硶錛屼紶閫掍竴涓狢allable錛屾垨Runnable錛岃繑鍥濬uture銆傚鏋淓xecutor鍚庡彴綰跨▼姹犺繕娌℃湁瀹屾垚Callable鐨勮綆楋紝榪欒皟鐢ㄨ繑鍥濬uture瀵硅薄鐨刧et()鏂規(guī)硶錛屼細(xì)闃誨鐩村埌璁$畻瀹屾垚銆?/p>

achan2bj 2012-09-24 11:18 鍙戣〃璇勮
]]>
String,StringBuffer鍙?qiáng)StringBuilderhttp://www.tkk7.com/achan2bj/archive/2012/09/24/388410.htmlachan2bjachan2bjMon, 24 Sep 2012 01:44:00 GMThttp://www.tkk7.com/achan2bj/archive/2012/09/24/388410.htmlString鍜孲tringBuffer鐨勫尯鍒紝緗戜笂璧勬枡鍙互璇存槸鏁頒笉鑳滄暟錛屼絾鏄湅鍒拌繖綃囨枃绔狅紝鎰熻閲岄潰鍋氱殑灝忎緥瀛愬緢鏈変唬琛ㄦэ紝鎵浠ヨ漿涓涓嬶紝騫惰嚜宸卞仛浜?jiǎn)涓鐐規(guī)葷粨銆?/p>

鍦╦ava涓湁3涓被鏉ヨ礋璐e瓧絎︾殑鎿嶄綔銆?

1.Character 鏄繘琛屽崟涓瓧絎︽搷浣滅殑錛?/p>

2.String 瀵逛竴涓插瓧絎﹁繘琛屾搷浣溿備笉鍙彉綾匯?/p>

3.StringBuffer 涔熸槸瀵逛竴涓插瓧絎﹁繘琛屾搷浣滐紝浣嗘槸鍙彉綾匯?/p>

String:
鏄璞′笉鏄師濮嬬被鍨?
涓轟笉鍙彉瀵硅薄,涓鏃﹁鍒涘緩,灝變笉鑳戒慨鏀瑰畠鐨勫?
瀵逛簬宸茬粡瀛樺湪鐨凷tring瀵硅薄鐨勪慨鏀歸兘鏄噸鏂板垱寤轟竴涓柊鐨勫璞?鐒跺悗鎶婃柊鐨勫間繚瀛樿繘鍘?
String 鏄痜inal綾?鍗充笉鑳借緇ф壙.

StringBuffer:
鏄竴涓彲鍙樺璞?褰撳浠栬繘琛屼慨鏀圭殑鏃跺欎笉浼?xì)鍍廠tring閭f牱閲嶆柊寤虹珛瀵硅薄
瀹冨彧鑳介氳繃鏋勯犲嚱鏁版潵寤虹珛,
StringBuffer sb = new StringBuffer();
note:涓嶈兘閫氳繃浠樺肩鍙峰浠栬繘琛屼粯鍊?
sb = "welcome to here!";//error
瀵硅薄琚緩绔嬩互鍚?鍦ㄥ唴瀛樹腑灝變細(xì)鍒嗛厤鍐呭瓨絀洪棿,騫跺垵濮嬩繚瀛樹竴涓猲ull.鍚慡tringBuffer
涓粯鍊肩殑鏃跺欏彲浠ラ氳繃瀹冪殑append鏂規(guī)硶.
sb.append("hello");

瀛楃涓茶繛鎺ユ搷浣滀腑StringBuffer鐨勬晥鐜囪姣擲tring楂?

String str = new String("welcome to ");
str += "here";
鐨勫鐞嗘楠ゅ疄闄呬笂鏄氳繃寤虹珛涓涓猄tringBuffer,璁╀警璋冪敤append(),鏈鍚?br />鍐嶅皢StringBuffer toSting();
榪欐牱鐨勮瘽String鐨勮繛鎺ユ搷浣滃氨姣擲tringBuffer澶氬嚭浜?jiǎn)涓浜涢檮鍔犳搷浣?褰撶劧鏁堢巼涓婅鎵撴姌鎵?

騫朵笖鐢變簬String 瀵硅薄鏄笉鍙彉瀵硅薄,姣忔鎿嶄綔Sting 閮戒細(xì)閲嶆柊寤虹珛鏂扮殑瀵硅薄鏉ヤ繚瀛樻柊鐨勫?
榪欐牱鍘熸潵鐨勫璞″氨娌$敤浜?灝辮琚瀮鍦懼洖鏀?榪欎篃鏄褰卞搷鎬ц兘鐨?

鐪嬬湅浠ヤ笅浠g爜錛?br />灝?6涓嫳鏂囧瓧姣嶉噸澶嶅姞浜?000嬈★紝

  1.         String tempstr = "abcdefghijklmnopqrstuvwxyz";
  2.         int times = 5000;
  3.         long lstart1 = System.currentTimeMillis();
  4.         String str = "";
  5.         for (int i = 0; i < times; i++) {
  6.             str += tempstr;
  7.         }
  8.         long lend1 = System.currentTimeMillis();
  9.         long time = (lend1 - lstart1);
  10.         System.out.println(time);

鍙儨鎴戠殑璁$畻鏈轟笉鏄秴綰ц綆楁満錛屽緱鍒扮殑緇撴灉姣忔涓嶄竴瀹氫竴鏍蜂竴鑸負(fù) 46687宸﹀彸銆?br />涔熷氨鏄?6縐掋?br />鎴戜滑鍐嶇湅鐪嬩互涓嬩唬鐮?/p>

  1.         String tempstr = "abcdefghijklmnopqrstuvwxyz";
  2.         int times = 5000;
  3.         long lstart2 = System.currentTimeMillis();
  4.         StringBuffer sb = new StringBuffer();
  5.         for (int i = 0; i < times; i++) {
  6.             sb.append(tempstr);
  7.         }
  8.         long lend2 = System.currentTimeMillis();
  9.         long time2 = (lend2 - lstart2);
  10.         System.out.println(time2);

寰楀埌鐨勭粨鏋滀負(fù) 16 鏈夋椂榪樻槸 0
鎵浠ョ粨璁哄緢鏄庢樉錛孲tringBuffer 鐨勯熷害鍑犱箮鏄疭tring 涓婁竾鍊嶃傚綋鐒惰繖涓暟鎹笉鏄緢鍑嗙‘銆傚洜涓哄驚鐜殑嬈℃暟鍦?00000嬈$殑鏃跺欙紝宸紓鏇村ぇ銆備笉淇′綘璇曡瘯銆?/p>

鏍規(guī)嵁涓婇潰鎵璇達(dá)細(xì)

str += "here";
鐨勫鐞嗘楠ゅ疄闄呬笂鏄氳繃寤虹珛涓涓猄tringBuffer,璁╀警璋冪敤append(),鏈鍚?br />鍐嶅皢StringBuffer toSting();

鎵浠tr += "here";鍙互絳夊悓浜?/p>

StringBuffer sb = new StringBuffer(str);

sb.append("here");

str = sb.toString();

鎵浠ヤ笂闈㈢洿鎺ュ埄鐢?+"鏉ヨ繛鎺tring鐨勪唬鐮佸彲浠ュ熀鏈瓑鍚屼簬浠ヤ笅浠g爜

  1.         String tempstr = "abcdefghijklmnopqrstuvwxyz";
  2.         int times = 5000;
  3.         long lstart2 = System.currentTimeMillis();
  4.         String str = "";
  5.         for (int i = 0; i < times; i++) {
  6.             StringBuffer sb = new StringBuffer(str);
  7.             sb.append(tempstr);
  8.             str = sb.toString();
  9.         }
  10.         long lend2 = System.currentTimeMillis();
  11.         long time2 = (lend2 - lstart2);
  12.         System.out.println(time2);

騫沖潎鎵ц鏃墮棿涓?6922宸﹀彸錛屼篃灝辨槸46縐掋?/p>

鎬葷粨: 濡傛灉鍦ㄧ▼搴忎腑闇瑕佸瀛楃涓茶繘琛岄綣佺殑淇敼榪炴帴鎿嶄綔鐨勮瘽.浣跨敤StringBuffer鎬ц兘浼?xì)鏇撮?br />
===========================================================================================


鑷粠Java 5.0鍙戝竷浠ュ悗錛屾垜浠殑姣旇緝鍒楄〃涓婂皢澶氬嚭涓涓璞′簡(jiǎn)錛岃繖灝辨槸StringBuilder綾匯係tring綾繪槸涓嶅彲鍙樼被錛屼換浣曞String鐨勬敼鍙橀兘浼?xì)寮曞彂鏂扮殑String瀵硅薄鐨勭敓鎴愶紱鑰孲tringBuffer鍒欐槸鍙彉綾伙紝浠諱綍瀵瑰畠鎵鎸囦唬鐨勫瓧絎︿覆鐨勬敼鍙橀兘涓嶄細(xì)浜х敓鏂扮殑瀵硅薄錛屽彲鍙樺拰涓嶅彲鍙樼被榪欎竴瀵瑰璞″凡緇忛綈鍏ㄤ簡(jiǎn)錛岄偅涔堜負(fù)浠涔堣繕瑕佸紩鍏ユ柊鐨凷tringBuilder綾誨共鍚楋紵鐩鎬俊澶у閮芥湁姝ょ枒闂紝鎴戜篃濡傛銆備笅闈紝鎴戜滑灝辨潵鐪嬬湅寮曞叆璇ョ被鐨勫師鍥犮?

      涓轟粈涔堜細(xì)鍑虹幇閭d箞澶氭瘮杈僑tring鍜孲tringBuffer鐨勬枃绔狅紵

      鍘熷洜鍦ㄤ簬褰撴敼鍙樺瓧絎︿覆鍐呭鏃訛紝閲囩敤StringBuffer鑳借幏寰楁洿濂界殑鎬ц兘銆傛棦鐒舵槸涓轟簡(jiǎn)鑾峰緱鏇村ソ鐨勬ц兘錛岄偅涔堥噰鐢⊿tringBuffer鑳藉鑾峰緱鏈濂界殑鎬ц兘鍚楋紵

      絳旀鏄疦O錛?

      涓轟粈涔堬紵

      濡傛灉浣犺榪囥奣hink in Java銆嬶紝鑰屼笖瀵歸噷闈㈡弿榪癏ashTable鍜孒ashMap鍖哄埆鐨勯偅閮ㄥ垎绔犺妭姣旇緝鐔熸?zhèn)夌殑璇濆Q屼綘涓瀹氫篃鏄庣櫧浜?jiǎn)鍘熷洜鎵鍦ㄣ傚錛屽氨鏄敮鎸佺嚎紼嬪悓姝ヤ繚璇佺嚎紼嬪畨鍏ㄨ屽鑷存ц兘涓嬮檷鐨勯棶棰樸?span style="color: red;">HashTable鏄嚎紼嬪畨鍏ㄧ殑錛屽緢澶氭柟娉曢兘鏄痵ynchronized鏂規(guī)硶錛岃孒ashMap涓嶆槸綰跨▼瀹夊叏鐨勶紝浣嗗叾鍦ㄥ崟綰跨▼紼嬪簭涓殑鎬ц兘姣擧ashTable瑕侀珮銆係tringBuffer鍜孲tringBuilder綾葷殑鍖哄埆涔熷湪浜庢錛?span style="color: red;">鏂板紩鍏ョ殑StringBuilder綾諱笉鏄嚎紼嬪畨鍏ㄧ殑錛屼絾鍏跺湪鍗曠嚎紼嬩腑鐨勬ц兘姣擲tringBuffer楂?/span>銆傚鏋滀綘瀵規(guī)涓嶅お鐩鎬俊錛屽彲浠ヨ瘯璇曚笅闈㈢殑渚嬪瓙錛?/p>

package com.hct.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* @author: chengtai.he
* @created:2009-12-9 涓婂崍09:59:57
*/
public class StringBuilderTester {
private static final String base = " base string. ";
private static final int count = 2000000;

public static void stringTest() {
  long begin, end;
  begin = System.currentTimeMillis();
  String test = new String(base);
  for (int i = 0; i < count/100; i++) {
   test = test + " add ";
  }
  end = System.currentTimeMillis();
  System.out.println((end - begin)
    + " millis has elapsed when used String. ");
}

public static void stringBufferTest() {
  long begin, end;
  begin = System.currentTimeMillis();
  StringBuffer test = new StringBuffer(base);
  for (int i = 0; i < count; i++) {
   test = test.append(" add ");
  }
  end = System.currentTimeMillis();
  System.out.println((end - begin)
    + " millis has elapsed when used StringBuffer. ");
}

public static void stringBuilderTest() {
  long begin, end;
  begin = System.currentTimeMillis();
  StringBuilder test = new StringBuilder(base);
  for (int i = 0; i < count; i++) {
   test = test.append(" add ");
  }
  end = System.currentTimeMillis();
  System.out.println((end - begin)
    + " millis has elapsed when used StringBuilder. ");
}

public static String appendItemsToStringBuiler(List list) {
  StringBuilder b = new StringBuilder();

  for (Iterator i = list.iterator(); i.hasNext();) {
   b.append(i.next()).append(" ");
  }

  return b.toString();
}

public static void addToStringBuilder() {
  List list = new ArrayList();
  list.add(" I ");
  list.add(" play ");
  list.add(" Bourgeois ");
  list.add(" guitars ");
  list.add(" and ");
  list.add(" Huber ");
  list.add(" banjos ");

  System.out.println(StringBuilderTester.appendItemsToStirngBuffer(list));
}

public static String appendItemsToStirngBuffer(List list) {
  StringBuffer b = new StringBuffer();

  for (Iterator i = list.iterator(); i.hasNext();) {
   b.append(i.next()).append(" ");
  }

  return b.toString();
}

public static void addToStringBuffer() {
  List list = new ArrayList();
  list.add(" I ");
  list.add(" play ");
  list.add(" Bourgeois ");
  list.add(" guitars ");
  list.add(" and ");
  list.add(" Huber ");
  list.add(" banjos ");

  System.out.println(StringBuilderTester.appendItemsToStirngBuffer(list));
}

public static void main(String[] args) {
  stringTest();
  stringBufferTest();
  stringBuilderTest();
  addToStringBuffer();
  addToStringBuilder();
}
}

涓婇潰鐨勭▼搴忕粨鏋滃涓嬶細(xì)
5266 millis has elapsed when used String.
375 millis has elapsed when used StringBuffer.
281 millis has elapsed when used StringBuilder.
I   play   Bourgeois   guitars   and   Huber   banjos 
I   play   Bourgeois   guitars   and   Huber   banjos
浠庝笂闈㈢殑緇撴灉鏉ョ湅錛岃繖涓変釜綾誨湪鍗曠嚎紼嬬▼搴忎腑鐨勬ц兘宸埆涓鐩簡(jiǎn)鐒?dòng)灱岄噰鐢⊿tring瀵硅薄鏃訛紝鍗充嬌榪愯嬈℃暟浠呮槸閲囩敤鍏朵粬瀵硅薄鐨?/100錛屽叾鎵ц鏃墮棿浠嶇劧姣斿叾浠栧璞¢珮鍑?5鍊嶄互涓婏紱鑰岄噰鐢⊿tringBuffer瀵硅薄鍜岄噰鐢⊿tringBuilder瀵硅薄鐨勫樊鍒篃姣旇緝鏄庢樉錛屽墠鑰呮槸鍚庤呯殑1.5鍊嶅乏鍙熾傜敱姝ゅ彲瑙侊紝濡傛灉鎴戜滑鐨勭▼搴忔槸鍦ㄥ崟綰跨▼涓嬭繍琛岋紝鎴栬呮槸涓嶅繀鑰冭檻鍒扮嚎紼嬪悓姝ラ棶棰橈紝鎴戜滑搴旇浼樺厛浣跨敤StringBuilder綾伙紱褰撶劧錛屽鏋滆淇濊瘉綰跨▼瀹夊叏錛岃嚜鐒墮潪StringBuffer鑾睘浜?jiǎn)銆?/p>

闄や簡(jiǎn)瀵瑰綰跨▼鐨勬敮鎸佷笉涓鏍峰錛岃繖涓や釜綾葷殑浣跨敤鍑犱箮娌℃湁浠諱綍宸埆錛屼笂闈㈢殑渚嬪瓙灝辨槸涓緢濂界殑璇存槑銆俛ppendItemsToStringBuiler鍜宎ppendItemsToStirngBuffer涓や釜鏂規(guī)硶闄や簡(jiǎn)閲囩敤鐨勫璞″垎鍒負(fù)StringBuilder鍜孲tringBuffer澶栵紝鍏朵粬瀹屽叏鐩稿悓錛岃屾晥鏋滀篃瀹屽叏鐩稿悓銆?/p>




achan2bj 2012-09-24 09:44 鍙戣〃璇勮
]]>
鏂板紑閫欱logJavahttp://www.tkk7.com/achan2bj/archive/2012/09/24/388405.htmlachan2bjachan2bjMon, 24 Sep 2012 00:42:00 GMThttp://www.tkk7.com/achan2bj/archive/2012/09/24/388405.htmlhttp://www.tkk7.com/achan2bj/comments/388405.htmlhttp://www.tkk7.com/achan2bj/archive/2012/09/24/388405.html#Feedback0http://www.tkk7.com/achan2bj/comments/commentRss/388405.htmlhttp://www.tkk7.com/achan2bj/services/trackbacks/388405.html

achan2bj 2012-09-24 08:42 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 怡红院免费的全部视频| 91在线视频免费看| 亚洲一区在线免费观看| 97视频热人人精品免费| 日日狠狠久久偷偷色综合免费| 国产AV无码专区亚洲A∨毛片| 久久久久免费看黄A片APP| 黄色a三级免费看| 337p日本欧洲亚洲大胆精品555588 | 精品国产亚洲第一区二区三区| 亚洲色婷婷一区二区三区| 免费观看的毛片大全| 一级黄色免费网站| 亚洲国产91在线| 人人狠狠综合久久亚洲婷婷| 成人男女网18免费视频| 国产精品网站在线观看免费传媒| 亚洲另类无码专区丝袜| 国产成人A人亚洲精品无码| 日本免费一区二区三区最新| 午夜网站在线观看免费完整高清观看| 国产大片免费网站不卡美女| 美女黄频免费网站| 亚洲精品亚洲人成在线麻豆| 中文字幕第一页亚洲| 在线观看人成视频免费无遮挡| 亚洲校园春色另类激情| 亚洲成AV人在线播放无码| 国产成人高清精品免费鸭子| 18禁美女裸体免费网站| 搡女人免费免费视频观看| 无码天堂亚洲国产AV| 久久精品国产99国产精品亚洲| 亚洲精品成人网站在线观看 | 亚洲最大成人网色| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 国产高清对白在线观看免费91 | 久久精品免费观看国产| 一级毛片aaaaaa视频免费看| 国产成人精品日本亚洲语音| 国产亚洲精品bv在线观看|