µ±Ç°Î»ÖãºÖ÷Ò³ > ²é¿´ÄÚÈÝ

3w ×Ö³¤Îı¬¸Î Java »ù´¡ÃæÊÔÌ⣡̫¶¥ÁË£¡£¡£¡

·¢²¼Ê±¼ä£º2021-05-18 00:00| ÓРλÅóÓѲ鿴

¼ò½é£ºhey guys Õâ²»ÊÇÒ²µ½ÁËÃæÊÔ¼¾ÁËôcxuan ÓÖ´òËãÖØÐÂдһÏ Java Ïà¹ØµÄÃæÊÔÌâÏÈ´Ó»ù´¡µÄ¿ªÊ¼°ÉÕâЩÃæÊÔÌâÊôÓÚ»ù´¡ÏµÁÐ ²»°üº¬¶àÏß³ÌÏà¹ØÃæÊÔÌâºÍ JVM Ïà¹ØÃæÊÔÌâ ¶àÏß³ÌºÍ JVM µÄÎÒ·ÅÔÚºóÃæÁËÏÂÃæ²»¶à˵¸ãÆð Java »ù´¡Æª Java ÓÐÄÄЩÌص㠲¢·¢Ð﵀ Äã¿ÉÒÔÔÚÆä¡­¡­

hey guys ,Õâ²»ÊÇÒ²µ½ÁËÃæÊÔ¼¾ÁËô,cxuan ÓÖ´òËãÖØÐÂдһÏ Java Ïà¹ØµÄÃæÊÔÌâ,ÏÈ´Ó»ù´¡µÄ¿ªÊ¼°É,ÕâЩÃæÊÔÌâÊôÓÚ»ù´¡ÏµÁÐ,²»°üº¬¶àÏß³ÌÏà¹ØÃæÊÔÌâºÍ JVM Ïà¹ØÃæÊÔÌâ,¶àÏß³ÌºÍ JVM µÄÎÒ·ÅÔÚºóÃæÁË,ÏÂÃæ²»¶à˵,¸ãÆð!

Java »ù´¡Æª

Java ÓÐÄÄЩÌصã

  • ²¢·¢ÐÔµÄ: Äã¿ÉÒÔÔÚÆäÖÐÖ´ÐÐÐí¶àÓï¾ä,¶ø²»±ØÒ»´ÎÖ´ÐÐËü
  • ÃæÏò¶ÔÏóµÄ:»ùÓÚÀàºÍÃæÏò¶ÔÏóµÄ±à³ÌÓïÑÔ¡£
  • ¶ÀÁ¢ÐÔµÄ: Ö§³ÖÒ»´Î±àд,µ½´¦ÔËÐеĶÀÁ¢±à³ÌÓïÑÔ,¼´±àÒëºóµÄ´úÂë¿ÉÒÔÔÚÖ§³Ö Java µÄËùÓÐƽ̨ÉÏÔËÐС£

Java µÄÌØÐÔ

Java µÄÌØÐÔÓÐÈçÏÂÕ⼸µã

  • ¼òµ¥,Java »áÈÃÄãµÄ¹¤×÷±äµÃ¸ü¼ÓÇáËÉ,ʹÄã°Ñ¹Ø×¢µã·ÅÔÚÖ÷ÒªÒµÎñÂß¼­ÉÏ,¶ø²»±Ø¹ØÐÄÖ¸Õë¡¢ÔËËã·ûÖØÔØ¡¢ÄÚ´æ»ØÊÕµÈÓëÖ÷ÒªÒµÎñÎ޹صŦÄÜ¡£
  • ±ãЯÐÔ,Java ÊÇƽ̨ÎÞ¹ØÐÔµÄ,ÕâÒâζ×ÅÔÚÒ»¸öƽ̨ÉϱàдµÄÈκÎÓ¦ÓóÌÐò¶¼¿ÉÒÔÇáËÉÒÆÖ²µ½ÁíÒ»¸öƽ̨ÉÏ¡£
  • °²È«ÐÔ, ±àÒëºó»á½«ËùÓеĴúÂëת»»Îª×Ö½ÚÂë,ÈËÀàÎÞ·¨¶ÁÈ¡¡£Ëüʹ¿ª·¢ÎÞ²¡¶¾,Î޴۸ĵÄϵͳ/Ó¦ÓóÉΪ¿ÉÄÜ¡£
  • ¶¯Ì¬ÐÔ,Ëü¾ßÓÐÊÊÓ¦²»¶Ï±ä»¯µÄ»·¾³µÄÄÜÁ¦,ËüÄܹ»Ö§³Ö¶¯Ì¬ÄÚ´æ·ÖÅä,´Ó¶ø¼õÉÙÁËÄÚ´æÀË·Ñ,Ìá¸ßÁËÓ¦ÓóÌÐòµÄÐÔÄÜ¡£
  • ·Ö²¼Ê½,Java ÌṩµÄ¹¦ÄÜÓÐÖúÓÚ´´½¨·Ö²¼Ê½Ó¦Óá£Ê¹ÓÃÔ¶³Ì·½·¨µ÷ÓÃ(RMI),³ÌÐò¿ÉÒÔͨ¹ýÍøÂçµ÷ÓÃÁíÒ»¸ö³ÌÐòµÄ·½·¨²¢»ñÈ¡Êä³ö¡£Äú¿ÉÒÔͨ¹ý´Ó»¥ÁªÍøÉϵÄÈκμÆËã»úÉϵ÷Ó÷½·¨À´·ÃÎÊÎļþ¡£ÕâÊǸïÃüÐÔµÄÒ»¸öÌصã,¶ÔÓÚµ±½ñµÄ»¥ÁªÍøÀ´ËµÌ«ÖØÒªÁË¡£
  • ½¡×³ÐÔ,Java ÓÐÇ¿´óµÄÄÚ´æ¹ÜÀí¹¦ÄÜ,ÔÚ±àÒëºÍÔËÐÐʱ¼ì²é´úÂë,ËüÓÐÖúÓÚÏû³ý´íÎó¡£
  • ¸ßÐÔÄÜ,Java ×îºÚµÄ¿Æ¼¼¾ÍÊÇ×Ö½ÚÂë±à³Ì,Java ´úÂë±àÒë³ÉµÄ×Ö½ÚÂë¿ÉÒÔÇáËÉת»»Îª±¾µØ»úÆ÷´úÂ롣ͨ¹ý JIT ¼´Ê±±àÒëÆ÷À´ÊµÏÖ¸ßÐÔÄÜ¡£
  • ½âÊÍÐÔ,Java ±»±àÒë³É×Ö½ÚÂë,ÓÉ Java ÔËÐÐʱ»·¾³½âÊÍ¡£
  • ¶àÏß³ÌÐÔ,JavaÖ§³Ö¶à¸öÖ´ÐÐÏß³Ì(Ò²³ÆΪÇáÁ¿¼¶½ø³Ì),°üÀ¨Ò»×éͬ²½Ô­Óï¡£ÕâʹµÃʹÓÃÏ̱߳à³Ì¸ü¼ÓÈÝÒ×,Java ͨ¹ý¹Ü³ÌÄ£ÐÍÀ´ÊµÏÖḬ̈߳²È«ÐÔ¡£

ÃæÏò¶ÔÏóµÄÌØÕ÷ÓÐÄÄЩ

ÃæÏò¶ÔÏóµÄÌØÕ÷Ö÷ÒªÓÐÈýµã

  • ·â×°:·â×°ÊÇÃæÏò¶ÔÏóµÄÌØÕ÷Ö®Ò»,ÊǶÔÏóºÍÀà¸ÅÄîµÄÖ÷ÒªÌØÐÔ¡£·â×°,Ò²¾ÍÊǰѿ͹ÛÊÂÎï·â×°³É³éÏóµÄÀà,²¢ÇÒÀà¿ÉÒÔ°Ñ×Ô¼ºµÄÊý¾ÝºÍ·½·¨Ö»ÈÿÉÐŵÄÀà»òÕ߶ÔÏó²Ù×÷,¶Ô²»¿ÉÐŵĽøÐÐÐÅÏ¢Òþ²Ø¡£

  • ¼Ì³Ð:¼Ì³ÐÖ¸µÄÊÇʹÓÃÏÖÓÐÀàµÄËùÓй¦ÄÜ,²¢ÔÚÎÞÐèÖØбàдԭÀ´µÄÀàµÄÇé¿ö϶ÔÕâЩ¹¦ÄܽøÐÐÀ©Õ¹¡£

  • ¶à̬:¶à̬ÊÇÔÊÐíÄ㽫¸¸¶ÔÏóÉèÖóÉΪºÍÒ»¸ö»ò¸ü¶àµÄËûµÄ×Ó¶ÔÏóÏàµÈµÄ¼¼Êõ,¸³ÖµÖ®ºó,¸¸¶ÔÏó¾Í¿ÉÒÔ¸ù¾Ýµ±Ç°¸³Öµ¸øËüµÄ×Ó¶ÔÏóµÄÌØÐÔÒÔ²»Í¬µÄ·½Ê½ÔË×÷¡£¼òµ¥µÄ˵,¾ÍÊÇÒ»¾ä»°:ÔÊÐí½«×ÓÀàÀàÐ͵ÄÖ¸Õ븳ֵ¸ø¸¸ÀàÀàÐ͵ÄÖ¸Õë¡£

JDK ºÍ JRE ÓÐʲôÇø±ð

  • JRE µÄÓ¢ÎÄÃû³ÆÊÇ Java Runtime Environment,Java ÔËÐÐʱ»·¾³¡£ËüÖ÷Òª°üº¬Á½¸ö²¿·Ö,jvm µÄ±ê׼ʵÏÖºÍ Java µÄһЩ»ù±¾Àà¿â¡£ËüÏà¶ÔÓÚ jvm À´Ëµ,¶à³öÀ´µÄÊÇÒ»²¿·ÖµÄ Java Àà¿â¡£
  • JDK µÄÓ¢ÎÄÃû³ÆÊÇ Java Development Kit,Java ¿ª·¢¹¤¾ß°ü¡£jdk ÊÇÕû¸ö Java ¿ª·¢µÄºËÐÄ,Ëü¼¯³ÉÁË jre ºÍһЩºÃÓõÄС¹¤¾ß¡£ÀýÈç:javac.exe,java.exe,jar.exe µÈ¡£

ÕâÀﻹÐèÒª½âÊÍһϠJVM ÊÇʲô

  • JVM µÄÓ¢ÎÄÃû³ÆÊÇ Java Virtual Machine,Ö¸µÄ¾ÍÊÇ Java ÐéÄâ»ú¡£Java ÐéÄâ»úÊÇ¿çƽ̨ʵÏֵĺËÐÄ

´óÖÂÀ´Ëµ,JRE¡¢JDK ºÍ JVM µÄ¹ØϵÈçÏÂ

ÃèÊöÒ»ÏÂÖµ´«µÝºÍÒýÓô«µÝµÄÇø±ð

ÒªÏëÕæÕýÀí½âµÄ»°,¿ÉÒԲο¼ÕâƪÎÄÕ : https://www.zhihu.com/question/31203609

¼òµ¥Àí½âµÄ»°¾ÍÊÇ

Öµ´«µÝÊÇÖ¸ÔÚµ÷Óú¯Êýʱ½«Êµ¼Ê²ÎÊý¸´ÖÆÒ»·Ýµ½º¯ÊýÖÐ,ÕâÑùµÄ»°Èç¹ûº¯Êý¶ÔÆä´«µÝ¹ýÀ´µÄÐÎʽ²ÎÊý½øÐÐÐÞ¸Ä,½«²»»áÓ°Ï쵽ʵ¼Ê²ÎÊý

ÒýÓô«µÝ ÊÇÖ¸ÔÚµ÷Óú¯Êýʱ½«¶ÔÏóµÄµØÖ·Ö±½Ó´«µÝµ½º¯ÊýÖÐ,Èç¹ûÔÚ¶ÔÐÎʽ²ÎÊý½øÐÐÐÞ¸Ä,½«Ó°Ï쵽ʵ¼Ê²ÎÊýµÄÖµ¡£

== ºÍ equals Çø±ðÊÇʲô

== ÊÇ Java ÖÐÒ»ÖÖ²Ù×÷·û,ËüÓÐÁ½ÖֱȽϷ½Ê½

  • ¶ÔÓÚ»ù±¾Êý¾ÝÀàÐÍÀ´Ëµ, == ÅжϵÄÊÇÁ½±ßµÄÖµÊÇ·ñÏàµÈ
public class DoubleCompareAndEquals {

    Person person1 = new Person(24,"boy");
    Person person2 = new Person(24,"girl");
    int c = 10;

    private void doubleCompare(){

        int a = 10;
        int b = 10;

        System.out.println(a == b);
        System.out.println(a == c);
        System.out.println(person1.getId() == person2.getId());

    }
}
  • ¶ÔÓÚÒýÓÃÀàÐÍÀ´Ëµ, == ÅжϵÄÊÇÁ½±ßµÄÒýÓÃÊÇ·ñÏàµÈ,Ò²¾ÍÊÇÅжÏÁ½¸ö¶ÔÏóÊÇ·ñÖ¸ÏòÁËͬһ¿éÄÚ´æÇøÓò¡£
private void equals(){

  System.out.println(person1.getName().equals(person2.getName()));
}

equals ÊÇ Java ÖÐËùÓжÔÏóµÄ¸¸Àà,¼´ Object ÀඨÒåµÄÒ»¸ö·½·¨¡£ËüÖ»ÄܱȽ϶ÔÏó,Ëü±íʾµÄÊÇÒýÓÃË«·½µÄÖµÊÇ·ñÏàµÈ¡£ËùÒÔ¼Çס,²¢²»ÊÇ˵ == ±È½ÏµÄ¾ÍÊÇÒýÓÃÊÇ·ñÏàµÈ,equals ±È½ÏµÄ¾ÍÊÇÖµ,ÕâÐèÒªÇø·ÖÀ´ËµµÄ¡£

equals ÓÃ×÷¶ÔÏóÖ®¼äµÄ±È½Ï¾ßÓÐÈçÏÂÌØÐÔ

  • ×Ô·´ÐÔ:¶ÔÓÚÈκηǿÕÒýÓà x À´Ëµ,x.equals(x) Ó¦¸Ã·µ»Ø true¡£
  • ¶Ô³ÆÐÔ:¶ÔÓÚÈκηǿÕÒýÓà x ºÍ y À´Ëµ,Èôx.equals(y)Ϊ true,Ôòy.equals(x)ҲΪ true¡£
  • ´«µÝÐÔ:¶ÔÓÚÈκηǿÕÒýÓõÄÖµÀ´Ëµ,ÓÐÈý¸öÖµ,x¡¢y ºÍ z,Èç¹ûx.equals(y) ·µ»Øtrue,y.equals(z) ·µ»Øtrue,ÄÇôx.equals(z) Ò²Ó¦¸Ã·µ»Øtrue¡£
  • Ò»ÖÂÐÔ:¶ÔÓÚÈκηǿÕÒýÓà x ºÍ y À´Ëµ,Èç¹û x.equals(y) ÏàµÈµÄ»°,ÄÇôËüÃDZØÐëʼÖÕÏàµÈ¡£
  • ·Ç¿ÕÐÔ:¶ÔÓÚÈκηǿÕÒýÓõÄÖµ x À´Ëµ,x.equals(null) ±ØÐë·µ»Ø false¡£

Java ÖеĻù±¾Êý¾ÝÀàÐÍÓÐÄÄЩ,¸÷×ÔÕ¼ÓöàÉÙ×Ö½Ú

ÔÚ Java ÖÐ,Êý¾ÝÀàÐÍÖ»ÓÐËÄÀà°ËÖÖ

  • ÕûÊýÐÍ:byte¡¢short¡¢int¡¢long

byte Ò²¾ÍÊÇ×Ö½Ú,1 byte = 8 bits,byte µÄĬÈÏÖµÊÇ 0 ;

short Õ¼ÓÃÁ½¸ö×Ö½Ú,Ò²¾ÍÊÇ 16 λ,1 short = 16 bits,ËüµÄĬÈÏÖµÒ²ÊÇ 0 ;

int Õ¼ÓÃËĸö×Ö½Ú,Ò²¾ÍÊÇ 32 λ,1 int = 32 bits,ĬÈÏÖµÊÇ 0 ;

long Õ¼Óð˸ö×Ö½Ú,Ò²¾ÍÊÇ 64 λ,1 long = 64 bits,ĬÈÏÖµÊÇ 0L;

ËùÒÔÕûÊýÐ͵ÄÕ¼ÓÃ×Ö½Ú´óС¿Õ¼äΪ long > int > short > byte

  • ¸¡µãÐÍ

¸¡µãÐÍÓÐÁ½ÖÖÊý¾ÝÀàÐÍ:float ºÍ double

float Êǵ¥¾«¶È¸¡µãÐÍ,Õ¼Óà 4 λ,1 float = 32 bits,ĬÈÏÖµÊÇ 0.0f;

double ÊÇË«¾«¶È¸¡µãÐÍ,Õ¼Óà 8 λ,1 double = 64 bits,ĬÈÏÖµÊÇ 0.0d;

  • ×Ö·ûÐÍ

×Ö·ûÐ;ÍÊÇ char,char ÀàÐÍÊÇÒ»¸öµ¥Ò»µÄ 16 λ Unicode ×Ö·û,×îСֵÊÇ \u0000 (Ò²¾ÍÊÇ 0 ),×î´óÖµÊÇ \uffff (¼´Îª 65535),char Êý¾ÝÀàÐÍ¿ÉÒÔ´æ´¢ÈκÎ×Ö·û,ÀýÈç char a = ¡®A¡¯¡£

  • ²¼¶ûÐÍ

²¼¶ûÐÍÖ¸µÄ¾ÍÊÇ boolean,boolean Ö»ÓÐÁ½ÖÖÖµ,true »òÕßÊÇ false,Ö»±íʾ 1 λ,ĬÈÏÖµÊÇ false¡£

ÒÔÉÏ x λ¶¼Ö¸µÄÊÇÔÚÄÚ´æÖеÄÕ¼Óá£

String ÖÐµÄ equals ÊÇÈçºÎÖØдµÄ

String ´ú±íµÄÊÇ Java ÖеÄ×Ö·û´®,String Àà±È½ÏÌØÊâ,ËüÕû¸öÀ඼ÊDZ» final ÐÞÊεÄ,Ò²¾ÍÊÇ˵,String ²»Äܱ»ÈκÎÀà¼Ì³Ð,ÈκΠÐÞ¸Ä String ×Ö·û´®µÄ·½·¨¶¼ÊÇ´´½¨ÁËÒ»¸öеÄ×Ö·û´®¡£

equals ·½·¨ÊÇ Object ÀඨÒåµÄ·½·¨,Object ÊÇËùÓÐÀàµÄ¸¸Àà,µ±È»Ò²°üÀ¨ String,String ÖØдÁË equals ·½·¨,ÏÂÃæÎÒÃÇÀ´¿´¿´ÊÇÔõôÖØдµÄ

  • Ê×ÏÈ»áÅжÏÒª±È½ÏµÄÁ½¸ö×Ö·û´®ËüÃǵÄÒýÓÃÊÇ·ñÏàµÈ¡£Èç¹ûÒýÓÃÏàµÈµÄ»°,Ö±½Ó·µ»Ø true ,²»ÏàµÈµÄ»°¼ÌÐøÏÂÃæµÄÅжÏ
  • È»ºóÔÙÅжϱ»±È½ÏµÄ¶ÔÏóÊÇ·ñÊÇ String µÄʵÀý,Èç¹û²»ÊǵĻ°Ö±½Ó·µ»Ø false,Èç¹ûÊǵĻ°,ÔٱȽÏÁ½¸ö×Ö·û´®µÄ³¤¶ÈÊÇ·ñÏàµÈ,Èç¹û³¤¶È²»ÏëµÈµÄ»°Ò²¾ÍûÓбȽϵıØÒªÁË;³¤¶ÈÈç¹ûÏàͬ,»á±È½Ï×Ö·û´®ÖеÄÿ¸ö ×Ö·û ÊÇ·ñÏàµÈ,Ò»µ©ÓÐÒ»¸ö×Ö·û²»ÏàµÈ,¾Í»áÖ±½Ó·µ»Ø false¡£

ÏÂÃæÊÇËüµÄÁ÷³Ìͼ

ÕâÀïÔÙÌáʾһÏÂ,Äã¿ÉÄÜÓÐÒÉ»óʲôʱºòÊÇ

if (this == anObject) {
  return true;
}

Õâ¸öÅжÏÓï¾äÈçºÎ²ÅÄÜ·µ»Ø true?ÒòΪ¶¼ÊÇ×Ö·û´®°¡,×Ö·û´®±È½ÏµÄ²»¶¼ÊǶѿռäÂð,ÃÍȻһ¿´·¢ÏÖºÃÏñÓÀÔ¶Ò²²»»á×ß,µ«ÊÇÄãÍü¼ÇÁË String.intern() ·½·¨,Ëü±íʾµÄ¸ÅÄîÔÚ²»Í¬µÄ JDK °æ±¾Óв»Í¬µÄÇø·Ö

ÔÚ JDK1.7 ¼°ÒÔºóµ÷Óà intern ·½·¨ÊÇÅжÏÔËÐÐʱ³£Á¿³ØÖÐÊÇ·ñÓÐÖ¸¶¨µÄ×Ö·û´®,Èç¹ûûÓеĻ°,¾Í°Ñ×Ö·û´®Ìí¼Óµ½³£Á¿³ØÖÐ,²¢·µ»Ø³£Á¿³ØÖеĶÔÏó¡£

ÑéÖ¤¹ý³ÌÈçÏÂ

private void StringOverrideEquals(){

  String s1 = "aaa";
  String s2 = "aa" + new String("a");
  String s3 = new String("aaa");

  System.out.println(s1.intern().equals(s1));
  System.out.println(s1.intern().equals(s2));
  System.out.println(s3.intern().equals(s1));

}
  • Ê×ÏÈ s1.intern.equals(s1) Õâ¸öÎÞÂÛÈçºÎ¶¼·µ»Ø true,ÒòΪ s1 ×Ö·û´®´´½¨³öÀ´¾ÍÒѾ­ÔÚ³£Á¿³ØÖдæÔÚÁË¡£

  • È»ºóµÚ¶þÌõÓï¾ä·µ»Ø false,ÒòΪ s1 ·µ»ØµÄÊdz£Á¿³ØÖеĶÔÏó,¶ø s2 ·µ»ØµÄÊǶÑÖеĶÔÏó

  • µÚÈýÌõÓï¾ä s3.intern.equals(s1),·µ»Ø true ,ÒòΪ s3 ¶ÔÏóËäÈ»ÔÚ¶ÑÖд´½¨ÁËÒ»¸ö¶ÔÏó,µ«ÊÇ s3 ÖÐµÄ ¡°aaa¡± ·µ»ØµÄÊdz£Á¿³ØÖеĶÔÏó¡£

ΪʲôÖØд equals ·½·¨±ØÐëÖØд hashcode ·½·¨

equals ·½·¨ºÍ hashCode ¶¼ÊÇ Object Öж¨ÒåµÄ·½·¨,ËüÃǾ­³£±»Ò»ÆðÖØд¡£

equals ·½·¨ÊÇÓÃÀ´±È½Ï¶ÔÏó´óСÊÇ·ñÏàµÈµÄ·½·¨,hashcode ·½·¨ÊÇÓÃÀ´ÅжÏÿ¸ö¶ÔÏó hash ÖµµÄÒ»ÖÖ·½·¨¡£Èç¹ûÖ»ÖØд equals ·½·¨¶ø²»ÖØд hashcode ·½·¨,ºÜ¿ÉÄÜ»áÔì³ÉÁ½¸ö²»Í¬µÄ¶ÔÏó,ËüÃÇµÄ hashcode Ò²ÏàµÈ,Ôì³É³åÍ»¡£±ÈÈç

String str1 = "ͨ»°";
String str2 = "ÖصØ";

ËüÃÇÁ½¸öµÄ hashcode ÏàµÈ,µ«ÊÇ equals ¿É²»ÏàµÈ¡£

ÎÒÃÇÀ´¿´Ò»Ï hashCode ¹Ù·½µÄ¶¨Òå

×ܽáÆðÀ´¾ÍÊÇ

  • Èç¹ûÔÚ Java ÔËÐÐÆÚ¼ä¶Ôͬһ¸ö¶ÔÏóµ÷Óà hashCode ·½·¨ºó,ÎÞÂÛµ÷ÓöàÉÙ´Î,¶¼Ó¦¸Ã·µ»ØÏàͬµÄ hashCode,µ«ÊÇÔÚ²»Í¬µÄ Java ³ÌÐòÖÐ,Ö´ÐÐ hashCode ·½·¨·µ»ØµÄÖµ¿ÉÄܲ»Ò»Ö¡£
  • Èç¹ûÁ½¸ö¶ÔÏóµÄ equals ÏàµÈ,ÄÇô hashCode ±ØÐëÏàͬ
  • Èç¹ûÁ½¸ö¶ÔÏó equals ²»ÏàµÈ,ÄÇô hashCode Ò²ÓпÉÄÜÏàͬ,ËùÒÔÐèÒªÖØд hashCode ·½·¨,ÒòΪÄã²»ÖªµÀ hashCode µÄµ×²ã¹¹Ôì(·´ÕýÎÒÊDz»ÖªµÀ,ÓдóÅ£¿ÉÒÔ´«ÊÚ´«ÊÚ),ËùÒÔÄãÐèÒªÖØд hashCode ·½·¨,À´Îª²»Í¬µÄ¶ÔÏóÉú³É²»Í¬µÄ hashCode Öµ,ÕâÑùÄܹ»Ìá¸ß²»Í¬¶ÔÏóµÄ·ÃÎÊËٶȡ£
  • hashCode ͨ³£Êǽ«µØַת»»ÎªÕûÊýÀ´ÊµÏֵġ£

Á½¸ö¶ÔÏóµÄ hashcode Ïàͬ,ÄÇô equals ÊÇ·ñÒ²Ò»¶¨Îª true

Õâ¸ö¿Ï¶¨ÊDz»Ò»¶¨µÄ,¾Ù¸ö·Ç³£¼òµ¥µÄÀý×Ó,ÄãÖØдÁË hashcode ·½·¨,À´ËãÈ¡ÓàÊý,ÄÇôÁ½¸ö¶ÔÏóµÄ hashcode ºÜ¿ÉÄÜÖظ´,µ«ÊÇÁ½¸ö¶ÔÏóµÄ equals È´²»Ò»¶¨Ïàͬ¡£

¾ÍËãÄã²»ÖØд hashcode ·½·¨,ÎÒ¸øÄãÒ»¶Î´úÂëʾÀý

String str1 = "ͨ»°";
String str2 = "ÖصØ";
System. out. println(String. format("str1:%d | str2:%d",  str1. hashCode(),str2. hashCode()));
System. out. println(str1. equals(str2));

ÉÏÃæÁ½¶Î´úÂëµÄÊä³ö½á¹ûÊÇ

str1:1179395 | str2:1179395
false

ÕâÁ½¸ö×Ö·û´®µÄ equals ²¢²»Ïàͬ¡£Ò²¾ÍÊÇ˵,¾ÍËãÊÇ hashcode ÏàͬµÄ×Ö·û´®,equals Ò²ÓпÉÄܲ»Í¬¡£

String s1 = new String(¡°abc¡±) ÔÚÄÚ´æÖд´½¨Á˼¸¸ö¶ÔÏó

Ò»¸ö»òÕßÁ½¸ö,String s1 ÊÇÉùÃ÷ÁËÒ»¸ö String ÀàÐ굀 s1 ±äÁ¿,Ëü²»ÊǶÔÏó¡£Ê¹Óà new ¹Ø¼ü×Ö»áÔÚ¶ÑÖд´½¨Ò»¸ö¶ÔÏó,ÁíÍâÒ»¸ö¶ÔÏóÊÇ abc ,Ëü»áÔÚ³£Á¿³ØÖд´½¨,ËùÒÔÒ»¹²´´½¨ÁËÁ½¸ö¶ÔÏó;Èç¹û abc ÔÚ³£Á¿³ØÖÐÒѾ­´æÔڵĻ°,ÄÇô¾Í»á´´½¨Ò»¸ö¶ÔÏó¡£

ÏêϸÇë·­ÔıÊÕßµÄÁíÍâһƪÎÄÕ һƪÓëÖÚ²»Í¬µÄ String¡¢StringBuffer¡¢StringBuilder Ïê½â

String ΪʲôÊDz»¿É±äµÄ¡¢jdk Ô´ÂëÖÐµÄ String ÈçºÎ¶¨ÒåµÄ¡¢ÎªÊ²Ã´ÕâôÉè¼Æ¡£

Ê×ÏÈÁ˽âÒ»ÏÂʲôÊDz»¿É±ä¶ÔÏó,²»¿É±ä¶ÔÏó¾ÍÊÇÒ»¾­´´½¨ºó,Æä¶ÔÏóµÄÄÚ²¿×´Ì¬²»Äܱ»ÐÞ¸Ä,ɶÒâ˼ÄØ?Ò²¾ÍÊÇ˵²»¿É±ä¶ÔÏóÐèÒª×ñÊØÏÂÃ漸ÌõÔ­Ôò

  • ²»¿É±ä¶ÔÏóµÄÄÚ²¿ÊôÐÔ¶¼ÊÇ final µÄ
  • ²»¿É±ä¶ÔÏóµÄÄÚ²¿ÊôÐÔ¶¼ÊÇ private µÄ
  • ²»¿É±ä¶ÔÏó²»ÄÜÌṩÈκοÉÒÔÐÞ¸ÄÄÚ²¿×´Ì¬µÄ·½·¨¡¢setter ·½·¨Ò²²»ÐÐ
  • ²»¿É±ä¶ÔÏó²»Äܱ»¼Ì³ÐºÍÀ©Õ¹

ÓëÆä˵ÎÊ String ΪʲôÊDz»¿É±äµÄ,²»Èç˵ÈçºÎ°Ñ String Éè¼Æ³É²»¿É±äµÄ¡£

String ÀàÊÇÒ»ÖÖ¶ÔÏó,ËüÊǶÀÁ¢ÓÚ Java »ù±¾Êý¾ÝÀàÐͶø´æÔÚµÄ,String Äã¿ÉÒÔ°ÑËüÀí½âΪ×Ö·û´®µÄ¼¯ºÏ,String ±»Éè¼ÆΪ final µÄ,±íʾ String ¶ÔÏóÒ»¾­´´½¨ºó,ËüµÄÖµ¾Í²»ÄÜÔÙ±»ÐÞ¸Ä,ÈÎºÎ¶Ô String Öµ½øÐÐÐ޸ĵķ½·¨¾ÍÊÇÖØд´½¨Ò»¸ö×Ö·û´®¡£String ¶ÔÏó´´½¨ºó»á´æÔÚÓÚÔËÐÐʱ³£Á¿³ØÖÐ,ÔËÐÐʱ³£Á¿³ØÊÇÊôÓÚ·½·¨ÇøµÄÒ»²¿·Ö,JDK1.7 ºó°ÑËüÒƵ½Á˶ÑÖС£

²»¿É±ä¶ÔÏó²»ÊÇÕæµÄ²»¿É±ä,¿ÉÒÔͨ¹ý·´ÉäÀ´¶ÔÆäÄÚ²¿µÄÊôÐÔºÍÖµ½øÐÐÐÞ¸Ä,²»¹ýÒ»°ãÎÒÃDz»ÕâÑù×ö¡£

static ¹Ø¼ü×ÖÊǸÉʲôÓõÄ?̸̸ÄãµÄÀí½â

static ÊÇ Java Öзdz£ÖØÒªµÄ¹Ø¼ü×Ö,static ±íʾµÄ¸ÅÄîÊÇ ¾²Ì¬µÄ,ÔÚ Java ÖÐ,static Ö÷ÒªÓÃÀ´

  • ÐÞÊαäÁ¿,static ÐÞÊεıäÁ¿³ÆΪ¾²Ì¬±äÁ¿¡¢Ò²³ÆΪÀà±äÁ¿,Àà±äÁ¿ÊôÓÚÀàËùÓÐ,¶ÔÓÚ²»Í¬µÄÀàÀ´Ëµ,static ±äÁ¿Ö»ÓÐÒ»·Ý,static ÐÞÊεıäÁ¿Î»ÓÚ·½·¨ÇøÖÐ;static ÐÞÊεıäÁ¿Äܹ»Ö±½Óͨ¹ý ÀàÃû.±äÁ¿Ãû À´½øÐзÃÎÊ,²»ÓÃͨ¹ýʵÀý»¯ÀàÔÙ½øÐÐʹÓá£
  • ÐÞÊη½·¨,static ÐÞÊεķ½·¨±»³ÆΪ¾²Ì¬·½·¨,¾²Ì¬·½·¨Äܹ»Ö±½Óͨ¹ý ÀàÃû.·½·¨Ãû À´Ê¹ÓÃ,ÔÚ¾²Ì¬·½·¨ÄÚ²¿²»ÄÜʹÓ÷Ǿ²Ì¬ÊôÐԺͷ½·¨
  • static ¿ÉÒÔÐÞÊδúÂë¿é,Ö÷Òª·ÖΪÁ½ÖÖ,Ò»ÖÖÖ±½Ó¶¨ÒåÔÚÀàÖÐ,ʹÓà static{},ÕâÖÖ±»³ÆΪ¾²Ì¬´úÂë¿é,Ò»ÖÖÊÇÔÚÀàÖж¨Ò徲̬ÄÚ²¿Àà,ʹÓà static class xxx À´½øÐж¨Òå¡£
  • static ¿ÉÒÔÓÃÓÚ¾²Ì¬µ¼°ü,ͨ¹ýʹÓà import static xxx À´ÊµÏÖ,ÕâÖÖ·½Ê½Ò»°ã²»ÍƼöʹÓÃ
  • static ¿ÉÒԺ͵¥ÀýģʽһÆðʹÓÃ,ͨ¹ýË«Öؼì²éËøÀ´ÊµÏÖḬ̈߳²È«µÄµ¥Àýģʽ¡£

ÉîÈëÀí½âÇë²Î¿¼ÕâƪÎÄÕ һ¸öССµÄ static »¹ÄÜÄѵÃסÎÒ?

final ¹Ø¼ü×ÖÊǸÉʲôÓõÄ?̸̸ÄãµÄÀí½â

final ÊÇ Java ÖеĹؼü×Ö,Ëü±íʾµÄÒâ˼ÊÇ ²»¿É±äµÄ,ÔÚ Java ÖÐ,final Ö÷ÒªÓÃÀ´

  • ÐÞÊÎÀà,final ÐÞÊεÄÀ಻Äܱ»¼Ì³Ð,²»Äܱ»¼Ì³ÐµÄÒâ˼¾ÍÊDz»ÄÜʹÓà extends À´¼Ì³Ð±» final ÐÞÊεÄÀà¡£
  • ÐÞÊαäÁ¿,final ÐÞÊεıäÁ¿²»Äܱ»¸Äд,²»Äܱ»¸ÄдµÄÒâ˼ÓÐÁ½ÖÖ,¶ÔÓÚ»ù±¾Êý¾ÝÀàÐÍÀ´Ëµ,final ÐÞÊεıäÁ¿,ÆäÖµ²»Äܱ»¸Ä±ä,final ÐÞÊεĶÔÏó,¶ÔÏóµÄÒýÓò»Äܱ»¸Ä±ä,µ«ÊǶÔÏóÄÚ²¿µÄÊôÐÔ¿ÉÒÔ±»Ð޸ġ£final ÐÞÊεıäÁ¿ÔÚijÖ̶ֳÈÉÏÆðµ½Á˲»¿É±äµÄЧ¹û,ËùÒÔ,¿ÉÒÔÓÃÀ´±£»¤Ö»¶ÁÊý¾Ý,ÓÈÆäÊÇÔÚ²¢·¢±à³ÌÖÐ,ÒòΪÃ÷È·µÄ²»ÄÜÔÙΪ final ±äÁ¿½øÐи³Öµ,ÓÐÀûÓÚ¼õÉÙ¶îÍâµÄͬ²½¿ªÏú¡£
  • ÐÞÊη½·¨,final ÐÞÊεķ½·¨²»Äܱ»ÖØд¡£
  • final ÐÞÊηûºÍ Java ³ÌÐòÐÔÄÜÓÅ»¯Ã»ÓбØÈ»ÁªÏµ

³éÏóÀàºÍ½Ó¿ÚµÄÇø±ðÊÇʲô

³éÏóÀàºÍ½Ó¿Ú¶¼ÊÇ Java ÖеĹؼü×Ö,³éÏóÀàºÍ½Ó¿ÚÖж¼ÔÊÐí½øÐз½·¨µÄ¶¨Òå,¶ø²»ÓþßÌåµÄ·½·¨ÊµÏÖ¡£³éÏóÀàºÍ½Ó¿Ú¶¼ÔÊÐí±»¼Ì³Ð,ËüÃǹ㷺µÄÓ¦ÓÃÓÚ JDK ºÍ¿ò¼ÜµÄÔ´ÂëÖÐ,À´ÊµÏÖ¶à̬ºÍ²»Í¬µÄÉè¼Æģʽ¡£

²»Í¬µãÔÚÓÚ

  • ³éÏ󼶱ð²»Í¬:Àà¡¢³éÏóÀà¡¢½Ó¿ÚÆäʵÊÇÈýÖÖ²»Í¬µÄ³éÏ󼶱ð,³éÏó³Ì¶ÈÒÀ´ÎÊÇ ½Ó¿Ú > ³éÏóÀà > Àà¡£ÔÚ½Ó¿ÚÖÐ,Ö»ÔÊÐí½øÐз½·¨µÄ¶¨Òå,²»ÔÊÐíÓз½·¨µÄʵÏÖ,³éÏóÀàÖпÉÒÔ½øÐз½·¨µÄ¶¨ÒåºÍʵÏÖ;¶øÀàÖÐÖ»ÔÊÐí½øÐз½·¨µÄʵÏÖ,ÎÒ˵µÄ·½·¨µÄ¶¨ÒåÊDz»ÔÊÐíÔÚ·½·¨ºóÃæ³öÏÖ {}
  • ʹÓõĹؼü×Ö²»Í¬:ÀàʹÓà class À´±íʾ;³éÏóÀàʹÓà abstract class À´±íʾ;½Ó¿ÚʹÓà interface À´±íʾ
  • ±äÁ¿:½Ó¿ÚÖж¨ÒåµÄ±äÁ¿Ö»ÄÜÊǹ«¹²µÄ¾²Ì¬³£Á¿,³éÏóÀàÖеıäÁ¿ÊÇÆÕͨ±äÁ¿¡£

ÖØдºÍÖØÔصÄÇø±ð

ÔÚ Java ÖÐ,ÖØдºÍÖØÔض¼ÊǶÔͬһ·½·¨µÄ²»Í¬±íÏÖÐÎʽ,ÏÂÃæÎÒÃÇÕë¶ÔÖØдºÍÖØÔØ×öһϼòµ¥µÄÇø·Ö

  • ×Ó¸¸¼¶¹Øϵ²»Í¬,ÖØдÊÇÕë¶Ô×Ó¼¶ºÍ¸¸¼¶µÄ²»Í¬±íÏÖÐÎʽ,¶øÖØÔØÊÇÔÚͬһÀàÖеIJ»Í¬±íÏÖÐÎʽ;
  • ¸ÅÄͬ,×ÓÀàÖØд¸¸ÀàµÄ·½·¨Ò»°ãʹÓà @override À´±íʾ;ÖØдºóµÄ·½·¨Æä·½·¨µÄÉùÃ÷ºÍ²ÎÊýÀàÐÍ¡¢Ë³Ðò±ØÐëÒªÓ븸ÀàÍêÈ«Ò»ÖÂ;ÖØÔØÊÇÕë¶ÔͬһÀàÖиÅÄî,ËüÒªÇóÖØÔصķ½·¨±ØÐëÂú×ãÏÂÃæÈκÎÒ»¸öÒªÇó:·½·¨²ÎÊýµÄ˳Ðò,²ÎÊýµÄ¸öÊý,²ÎÊýµÄÀàÐÍÈÎÒâÒ»¸ö±£³Ö²»Í¬¼´¿É¡£

¹¹ÔìÆ÷ÄÜ·ñ±»ÖØÔØ,ÄÜ·ñ±»ÖØд?

ÕâµÀÌ⿼µ½Äã¶ÔÓÚ¹¹ÔìÆ÷µÄÀí½âºÍÈÏʶ¡£

ÎÒÃÇ Java Öд´½¨Ò»¸ö¶ÔÏóÆäʵ¾ÍÊǵ÷ÓÃÁ˸öÔÏóµÄ¹¹Ôì·½·¨,±ÈÈçÏÂÃæ´úÂë

InstanceObject IO = new InstanceObject() ; // µ÷ÓÃÁËÎ޲ι¹Ôì·½·¨
InstanceObject IO = new InstanceObject(xxx) ; // µ÷ÓÃÁËÓвÎÊýµÄ¹¹Ôì·½·¨

¶øÖØÔصĸÅÄîÊÇʲôÄØ?

ËüÊÇÖ¸ÎÒÃÇ¿ÉÒÔ¶¨ÒåһЩÃû³ÆÏàͬµÄ·½·¨,ͨ¹ý¶¨Ò岻ͬµÄÊäÈë²ÎÊýÀ´Çø·ÖÕâЩ·½·¨,È»ºóÔÙµ÷ÓÃʱ,JVM ¾Í»á¸ù¾Ý²»Í¬µÄ²ÎÊýÑùʽ,À´Ñ¡ÔñºÏÊʵķ½·¨Ö´ÐС£

Ò²¾ÍÊÇ˵,ÖØÔصĸÅÄî¸ü¶àÃèÊöµÄÊǶÔÏàͬÃüÃûµÄ·½·¨µÄ²»Í¬ÃèÊö¡£ÄÇôÎÒÃÇÉÏÃæÕâ¶Î´úÂëºÜÏÔÈ»¾ÍÊÇÖØÔØÁË,ÒòΪÃû³ÆÏàͬ,ÎÒ¿ÉÒÔͨ¹ýÓÐÎÞ²ÎÊýÀ´Åжϵ÷Óò»Í¬µÄ¹¹Ôì·½·¨À´½øÐгõʼ»¯¡£

ÄÇô¹¹ÔìÆ÷ÄÜ·ñ±»ÖØдÄØ?ÕâÀïÎÒÃÇÏÈÀ´¿´Ò»ÏÂʲôÊÇÖØд

ÖØдÊÇ×ÓÀà¶Ô¸¸ÀàµÄÔÊÐí·ÃÎʵķ½·¨µÄʵÏÖ¹ý³Ì½øÐÐÖØбàд, ·µ»ØÖµºÍÐβζ¼²»Äܸı䡣´ÓÖØдµÄ¸ÅÄÒåÀ´ËµÎÒÃǾÍÖªµÀ¹¹ÔìÆ÷²»Äܱ»ÖØдÁË¡£

Ê×ÏÈ,¹¹ÔìÆ÷ûÓзµ»ØÖµ,µÚ¶þµã,¹¹ÔìÆ÷µÄÃû³Æ±ØÐëºÍÀàÃûÒ»Ö¡£

Äã×ܲ»ÄÜÔÚÀà A ÖÐдÁË public A();ÔÚÀà B ÖÐҲд public A() °É,ÕâÏÔÈ»ÊDz»ÄÜͨ¹ý±àÒëµÄ¡£

byteµÄÈ¡Öµ·¶Î§ÊǶàÉÙ,Ôõô¼ÆËã³öÀ´µÄ

byte µÄÈ¡Öµ·¶Î§ÊÇ -128 -> 127 Ö®¼ä,Ò»¹²ÊÇ 256 ¸ö¡£Ò»¸ö byte ÀàÐÍÔÚ¼ÆËã»úÖÐÕ¼¾ÝÒ»¸ö×Ö½Ú,ÄÇô¾ÍÊÇ 8 bit,ËùÒÔ×î´ó¾ÍÊÇ 2^7 = 1111 1111¡£

Java ÖÐÓò¹ÂëÀ´±íʾ¶þ½øÖÆÊý,²¹ÂëµÄ×î¸ßλÊÇ·ûºÅλ,×î¸ßλÓà 0 ±íʾÕýÊý,×î¸ßλ 1 ±íʾ¸ºÊý,ÕýÊýµÄ²¹Âë¾ÍÊÇÆä±¾Éí,ÓÉÓÚ×î¸ßλÊÇ·ûºÅλ,ËùÒÔÕýÊý±íʾµÄ¾ÍÊÇ 0111 1111 ,Ò²¾ÍÊÇ 127¡£×î´ó¸ºÊý¾ÍÊÇ 1111 1111,ÕâÆäÖлáÉæ¼°µ½Á½¸ö 0 ,Ò»¸ö +0 ,Ò»¸ö -0 ,+0 ¹éΪÕýÊý,Ò²¾ÍÊÇ 0 ,-0 ¹éΪ¸ºÊý,Ò²¾ÍÊÇ -128,ËùÒÔ byte µÄ·¶Î§¾ÍÊÇ -128 - 127¡£

HashMap ºÍ HashTable µÄÇø±ð

Ïàͬµã

HashMap ºÍ HashTable ¶¼ÊÇ»ùÓÚ¹þÏ£±íʵÏÖµÄ,ÆäÄÚ²¿Ã¿¸öÔªËض¼ÊÇ key-value ¼üÖµ¶Ô,HashMap ºÍ HashTable ¶¼ÊµÏÖÁË Map¡¢Cloneable¡¢Serializable ½Ó¿Ú¡£

²»Í¬µã

  • ¸¸À಻ͬ:HashMap ¼Ì³ÐÁË AbstractMap Àà,¶ø HashTable ¼Ì³ÐÁË Dictionary Àà

  • ¿ÕÖµ²»Í¬:HashMap ÔÊÐí¿ÕµÄ key ºÍ value Öµ,HashTable ²»ÔÊÐí¿ÕµÄ key ºÍ value Öµ¡£HashMap »á°Ñ Null key µ±×öÆÕͨµÄ key ¶Ô´ý¡£²»ÔÊÐí null key Öظ´¡£

  • Ḭ̈߳²È«ÐÔ:HashMap ²»ÊÇḬ̈߳²È«µÄ,Èç¹û¶à¸öÍⲿ²Ù×÷ͬʱÐÞ¸Ä HashMap µÄÊý¾Ý½á¹¹±ÈÈç add »òÕßÊÇ delete,±ØÐë½øÐÐͬ²½²Ù×÷,½ö½ö¶Ô key »òÕß value µÄÐ޸IJ»ÊǸıäÊý¾Ý½á¹¹µÄ²Ù×÷¡£¿ÉÒÔÑ¡Ôñ¹¹ÔìḬ̈߳²È«µÄ Map ±ÈÈç Collections.synchronizedMap »òÕßÊÇ ConcurrentHashMap¡£¶ø HashTable ±¾Éí¾ÍÊÇḬ̈߳²È«µÄÈÝÆ÷¡£
  • ÐÔÄÜ·½Ãæ:ËäÈ» HashMap ºÍ HashTable ¶¼ÊÇ»ùÓÚµ¥Á´±íµÄ,µ«ÊÇ HashMap ½øÐÐ put »òÕß get􏱤 ²Ù×÷,¿ÉÒÔ´ïµ½³£Êýʱ¼äµÄÐÔÄÜ;¶ø HashTable µÄ put ºÍ get ²Ù×÷¶¼ÊǼÓÁË synchronized ËøµÄ,ËùÒÔЧÂʺܲ

  • ³õʼÈÝÁ¿²»Í¬:HashTable µÄ³õʼ³¤¶ÈÊÇ11,Ö®ºóÿ´ÎÀ©³äÈÝÁ¿±äΪ֮ǰµÄ 2n+1(nΪÉÏÒ»´ÎµÄ³¤¶È)¶ø HashMap µÄ³õʼ³¤¶ÈΪ16,Ö®ºóÿ´ÎÀ©³ä±äΪԭÀ´µÄÁ½±¶¡£´´½¨Ê±,Èç¹û¸ø¶¨ÁËÈÝÁ¿³õʼֵ,ÄÇôHashTable »áÖ±½ÓʹÓÃÄã¸ø¶¨µÄ´óС,¶ø HashMap »á½«ÆäÀ©³äΪ2µÄÃݴη½´óС¡£

HashMap ºÍ HashSet µÄÇø±ð

HashSet ¼Ì³ÐÓÚ AbstractSet ½Ó¿Ú,ʵÏÖÁË Set¡¢Cloneable,¡¢java.io.Serializable ½Ó¿Ú¡£HashSet ²»ÔÊÐí¼¯ºÏÖгöÏÖÖظ´µÄÖµ¡£HashSet µ×²ãÆäʵ¾ÍÊÇ HashMap,ËùÓÐ¶Ô HashSet µÄ²Ù×÷Æäʵ¾ÍÊÇ¶Ô HashMap µÄ²Ù×÷¡£ËùÒÔ HashSet Ò²²»±£Ö¤¼¯ºÏµÄ˳Ðò,Ò²²»ÊÇḬ̈߳²È«µÄÈÝÆ÷¡£

HashMap µÄµ×²ã½á¹¹

JDK1.7 ÖÐ,HashMap ²ÉÓÃλͰ + Á´±íµÄʵÏÖ,¼´Ê¹ÓÃÁ´±íÀ´´¦Àí³åÍ»,ͬһ hash ÖµµÄÁ´±í¶¼´æ´¢ÔÚÒ»¸öÊý×éÖС£µ«Êǵ±Î»ÓÚÒ»¸öÍ°ÖеÄÔªËؽ϶à,¼´ hash ÖµÏàµÈµÄÔªËؽ϶àʱ,ͨ¹ý key ÖµÒÀ´Î²éÕÒµÄЧÂʽϵ͡£

ËùÒÔ,Óë JDK 1.7 Ïà±È,JDK 1.8 Ôڵײã½á¹¹·½Ãæ×öÁËһЩ¸Ä±ä,µ±Ã¿¸öÍ°ÖÐÔªËØ´óÓÚ 8 µÄʱºò,»áת±äΪºìºÚÊ÷,Ä¿µÄ¾ÍÊÇÓÅ»¯²éѯЧÂÊ¡£

HashMap µÄ³¤¶ÈΪʲôÊÇ 2 µÄÃݴη½

ÕâµÀÌâÎÒÏëÁ˼¸Ìì,֮ǰºÍȺÀïС»ï°éÃÇ̽ÌÖÿÈÕÒ»ÌâµÄʱºò,ÎÊËûÃÇΪʲô length%hash == (n - 1) & hash,ËüÃÇ˵ÏàµÈµÄÇ°ÌáÊÇ length µÄ³¤¶È 2 µÄÃݴη½,È»ºóÎÒ»ØÁËÒ»¾äÄѵÀ length »¹Äܲ»ÊÇ 2 µÄÃݴη½Âð?ÆäʵÊÇÎÒûÓи㶮Òò¹û¹Øϵ,ÒòΪ HashMap µÄ³¤¶ÈÊÇ 2 µÄÃݴη½,ËùÒÔʹÓÃÓàÊýÀ´ÅжÏÔÚÍ°ÖеÄϱꡣÈç¹û length µÄ³¤¶È²»ÊÇ 2 µÄÃݴη½,С»ï°éÃÇ¿ÉÒÔ¾Ù¸öÀý×ÓÀ´ÊÔÊÔ

ÀýÈ糤¶ÈΪ 9 ʱºò,3 & (9-1) = 0,2 & (9-1) = 0 ,¶¼ÔÚ 0 ÉÏ,ÅöײÁË;

ÕâÑù»áÔö´ó HashMap ÅöײµÄ¼¸ÂÊ¡£

HashMap ¶àÏ̲߳Ù×÷µ¼ÖÂËÀÑ­»·ÎÊÌâ

HashMap ²»ÊÇÒ»¸öḬ̈߳²È«µÄÈÝÆ÷,Ôڸ߲¢·¢³¡¾°ÏÂ,Ó¦¸ÃʹÓà ConcurrentHashMap,ÔÚ¶àÏ̳߳¡¾°ÏÂʹÓà HashMap »áÔì³ÉËÀÑ­»·ÎÊÌâ(»ùÓÚ JDK1.7),³öÏÖÎÊÌâµÄλÖÃÔÚ rehash ´¦,Ò²¾ÍÊÇ

do {
    Entry<K,V> next = e.next; // <--¼ÙÉèÏß³ÌÒ»Ö´Ðе½ÕâÀï¾Í±»µ÷¶È¹ÒÆðÁË
    int i = indexFor(e.hash, newCapacity);
    e.next = newTable[i];
    newTable[i] = e;
    e = next;
} while (e != null);

ÕâÊÇ JDK1.7 µÄ rehash ´úÂëƬ¶Î,ÔÚ²¢·¢µÄ³¡¾°Ï»áÐγɻ·¡£

JDK1.8 Ò²»áÔì³ÉËÀÑ­»·ÎÊÌâ¡£

HashMap Ḭ̈߳²È«µÄʵÏÖÓÐÄÄЩ

ÒòΪ HashMap ²»ÊÇÒ»¸öḬ̈߳²È«µÄÈÝÆ÷,ËùÒÔ²¢·¢³¡¾°ÏÂÍƼöʹÓà ConcurrentHashMap ,»òÕßʹÓÃḬ̈߳²È«µÄ HashMap,ʹÓà Collections °üϵÄḬ̈߳²È«µÄÈÝÆ÷,±ÈÈç˵

Collections.synchronizedMap(new HashMap());

»¹¿ÉÒÔʹÓà HashTable ,ËüÒ²ÊÇḬ̈߳²È«µÄÈÝÆ÷,»ùÓÚ key-value ´æ´¢,¾­³£Óà HashMap ºÍ HashTable ×ö±È½Ï¾ÍÊÇÒòΪ HashTable µÄÊý¾Ý½á¹¹ºÍ HashMap Ïàͬ¡£

ÉÏÃæЧÂÊ×î¸ßµÄ¾ÍÊÇ ConcurrentHashMap¡£

½²Ò»Ï HashMap put µÄ¹ý³Ì

Ê×ÏÈ»áʹÓà hash º¯ÊýÀ´¼ÆËã key,È»ºóÖ´ÐÐÕæÕýµÄ²åÈë·½·¨

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
                   boolean evict) {
  Node<K,V>[] tab; Node<K,V> p; int n, i;
  // Èç¹ûtable Ϊnull »òÕßûÓÐΪtable·ÖÅäÄÚ´æ,¾ÍresizeÒ»´Î
  if ((tab = table) == null || (n = tab.length) == 0)
    n = (tab = resize()).length;
  // Ö¸¶¨hashÖµ½ÚµãΪ¿ÕÔòÖ±½Ó²åÈë,Õâ¸ö(n - 1) & hash²ÅÊDZíÖÐÕæÕýµÄ¹þÏ£
  if ((p = tab[i = (n - 1) & hash]) == null)
    tab[i] = newNode(hash, key, value, null);
  // Èç¹û²»Îª¿Õ
  else {
    Node<K,V> e; K k;
    // ¼ÆËã±íÖеÄÕâ¸öÕæÕýµÄ¹þÏ£ÖµÓëÒª²åÈëµÄkey.hashÏà±È
    if (p.hash == hash &&
        ((k = p.key) == key || (key != null && key.equals(k))))
      e = p;
    // Èô²»Í¬µÄ»°,²¢ÇÒµ±Ç°½ÚµãÒѾ­ÔÚ TreeNode ÉÏÁË
    else if (p instanceof TreeNode)
      // ²ÉÓúìºÚÊ÷´æ´¢·½Ê½
      e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
    // key.hash ²»Í¬²¢ÇÒÒ²²»ÔÙ TreeNode ÉÏ,ÔÚÁ´±íÉÏÕÒµ½ p.next==null
    else {
      for (int binCount = 0; ; ++binCount) {
        if ((e = p.next) == null) {
          // ÔÚ±íβ²åÈë
          p.next = newNode(hash, key, value, null);
          // ÐÂÔö½ÚµãºóÈç¹û½Úµã¸öÊýµ½´ïãÐÖµ,Ôò½øÈë treeifyBin() ½øÐÐÔÙ´ÎÅжÏ
          if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
            treeifyBin(tab, hash);
          break;
        }
        // Èç¹ûÕÒµ½ÁËͬhash¡¢keyµÄ½Úµã,ÄÇôֱ½ÓÍ˳öÑ­»·
        if (e.hash == hash &&
            ((k = e.key) == key || (key != null && key.equals(k))))
          break;
        // ¸üРp Ö¸ÏòÏÂÒ»½Úµã
        p = e;
      }
    }
    // mapÖк¬ÓоÉÖµ,·µ»Ø¾ÉÖµ
    if (e != null) { // existing mapping for key
      V oldValue = e.value;
      if (!onlyIfAbsent || oldValue == null)
        e.value = value;
      afterNodeAccess(e);
      return oldValue;
    }
  }
  // mapµ÷Õû´ÎÊý + 1
  ++modCount;
  // ¼üÖµ¶ÔµÄÊýÁ¿´ïµ½ãÐÖµ,ÐèÒªÀ©ÈÝ
  if (++size > threshold)
    resize();
  afterNodeInsertion(evict);
  return null;
}

HashMap put ·½·¨µÄºËÐľÍÊÇÔÚ putval ·½·¨,ËüµÄ²åÈë¹ý³ÌÈçÏÂ

  • Ê×ÏÈ»áÅÐ¶Ï HashMap ÖÐÊÇ·ñÊÇй¹½¨µÄ,Èç¹ûÊǵĻ°»áÊ×ÏȽøÐÐ resize
  • È»ºóÅжÏÐèÒª²åÈëµÄÔªËØÔÚ HashMap ÖÐÊÇ·ñÒѾ­´æÔÚ(˵Ã÷³öÏÖÁËÅöײÇé¿ö),Èç¹û²»´æÔÚ,Ö±½ÓÉú³ÉеÄk-v ½Úµã´æ·Å,ÔÙÅжÏÊÇ·ñÐèÒªÀ©ÈÝ¡£
  • Èç¹ûÒª²åÈëµÄÔªËØÒѾ­´æÔڵĻ°,˵Ã÷·¢ÉúÁ˳åÍ»,Õâ¾Í»áת»»³ÉÁ´±í»òÕߺìºÚÊ÷À´½â¾ö³åÍ»,Ê×ÏÈÅжÏÁ´±íÖÐµÄ hash,key ÊÇ·ñÏàµÈ,Èç¹ûÏàµÈµÄ»°,¾ÍÓÃÐÂÖµÌæ»»¾ÉÖµ,Èç¹û½ÚµãÊÇÊôÓÚ TreeNode ÀàÐÍ,»áÖ±½ÓÔÚºìºÚÊ÷ÖнøÐд¦Àí,Èç¹û hash ,key ²»ÏàµÈÒ²²»ÊôÓÚ TreeNode ÀàÐÍ,»áÖ±½Óת»»ÎªÁ´±í´¦Àí,½øÐÐÁ´±í±éÀú,Èç¹ûÁ´±íµÄ next ½ÚµãÊÇ null,ÅжÏÊÇ·ñת»»ÎªºìºÚÊ÷,Èç¹û²»×ª»»µÄ»°,ÔÚ±éÀú¹ý³ÌÖÐÕÒµ½ key ÍêÈ«ÏàµÈµÄ½Úµã,ÔòÓÃнڵãÌæ»»ÀϽڵã

¹ØÓÚ HashMap µÄÉîÈëÀí½âÇë²Î¿¼ÕâƪÎÄÕ ¿´ÍêÕâƪ HashMap ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË

ConcurrentHashMap µ×²ãʵÏÖ

ConcurrentHashMap ÊÇḬ̈߳²È«µÄ Map,ËüÒ²ÊǸ߲¢·¢³¡¾°ÏµÄÊ×Ñ¡Êý¾Ý½á¹¹,ConcurrentHashMap µ×²ãÊÇʹÓ÷ֶÎËøÀ´ÊµÏֵġ£

Integer »º´æ³Ø

Integer »º´æ³ØÒ²¾ÍÊÇ IntegerCache ,ËüÊÇ Integer µÄ¾²Ì¬ÄÚ²¿Àà¡£

image-20200608064905703

ËüµÄĬÈÏÖµÓÃÓÚ»º´æ -128 - 127 Ö®¼äµÄÊý×Ö,Èç¹ûÓÐ -128 - 127 Ö®¼äµÄÊý×ֵĻ°,ʹÓà new Integer ²»Óô´½¨¶ÔÏó,»áÖ±½Ó´Ó»º´æ³ØÖÐÈ¡,´Ë²Ù×÷»á¼õÉÙ¶ÑÖжÔÏóµÄ·ÖÅä,ÓÐÀûÓÚÌá¸ß³ÌÐòµÄÔËÐÐЧÂÊ¡£

ÀýÈç´´½¨Ò»¸ö Integer a = 24,ÆäʵÊǵ÷Óà Integer µÄ valueOf ,¿ÉÒÔͨ¹ý·´±àÒëµÃ³öÕâ¸ö½áÂÛ

È»ºóÎÒÃÇ¿´Ò»Ï valueOf ·½·¨

Èç¹ûÔÚÖ¸¶¨»º´æ³Ø·¶Î§ÄڵĻ°,»áÖ±½Ó·µ»Ø»º´æµÄÖµ¶ø²»Óô´½¨Ð嵀 Integer ¶ÔÏó¡£

»º´æµÄ´óС¿ÉÒÔʹÓà XX:AutoBoxCacheMax À´Ö¸¶¨,ÔÚ VM ³õʼ»¯Ê±,java.lang.Integer.IntegerCache.high ÊôÐÔ»áÉèÖúͱ£´æÔÚ sun.misc.VM µÄ˽ÓÐϵͳÊôÐÔÖС£

UTF-8 ºÍ Unicode µÄ¹Øϵ

ÓÉÓÚÿ¸ö¹ú¼Ò¶¼ÓÐ×Ô¼º¶ÀÓеÄ×Ö·û±àÂë,ËùÒÔUnicode µÄ·¢Õ¹Ö¼ÔÚ´´½¨Ò»¸öеıê×¼,ÓÃÀ´Ó³Éäµ±½ñʹÓõĴó¶àÊýÓïÑÔÖеÄ×Ö·û,ÕâЩ×Ö·ûÓÐһЩ²»ÊDZØÒªµÄ,µ«ÊǶÔÓÚ´´½¨Îı¾À´ËµÈ´ÊDz»¿É»òȱµÄ¡£Unicode ͳһÁËËùÓÐ×Ö·ûµÄ±àÂë,ÊÇÒ»¸ö Character Set,Ò²¾ÍÊÇ×Ö·û¼¯,×Ö·û¼¯Ö»ÊǸøËùÓеÄ×Ö·ûÒ»¸öΨһ±àºÅ,µ«ÊÇȴûÓй涨ÈçºÎ´æ´¢,²»Í¬µÄ×Ö·ûÆä´æ´¢¿Õ¼ä²»Ò»Ñù,ÓеÄÐèÒªÒ»¸ö×Ö½Ú¾ÍÄÜ´æ´¢,ÓеÄÔòÐèÒª2¡¢3¡¢4¸ö×Ö½Ú¡£

UTF-8 Ö»ÊÇÖÚ¶àÄܹ»¶ÔÎı¾×Ö·û½øÐнâÂëµÄÒ»ÖÖ·½Ê½,ËüÊÇÒ»Öֱ䳤µÄ·½Ê½¡£UTF-8 ´ú±í 8 λһ×é±íʾ Unicode ×Ö·ûµÄ¸ñʽ,ʹÓà 1 - 4 ¸ö×Ö½ÚÀ´±íʾ×Ö·û¡£

U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

¿ÉÒÔ¿´µ½,UTF-8 ͨ¹ý¿ªÍ·µÄ±ê־λλÊýʵÏÖÁ˱䳤¡£¶ÔÓÚµ¥×Ö½Ú×Ö·û,Ö»Õ¼ÓÃÒ»¸ö×Ö½Ú,ʵÏÖÁËÏòϼæÈÝ ASCII,²¢ÇÒÄÜºÍ UTF-32 Ò»Ñù,°üº¬ Unicode ÖеÄËùÓÐ×Ö·û,ÓÖÄÜÓÐЧ¼õÉÙ´æ´¢´«Êä¹ý³ÌÖÐÕ¼ÓõĿռ䡣

ÏîĿΪ UTF-8 »·¾³,char c = ¡®ÖС¯,ÊÇ·ñºÏ·¨

¿ÉÒÔ,ÒòΪ Unicode ±àÂë²ÉÓà 2 ¸ö×ֽڵıàÂë,UTF-8 ÊÇ Unicode µÄÒ»ÖÖʵÏÖ,ËüʹÓÿɱ䳤¶ÈµÄ×Ö·û¼¯½øÐбàÂë,char c = ¡®ÖС¯ ÊÇÁ½¸ö×Ö½Ú,ËùÒÔÄܹ»´æ´¢¡£ºÏ·¨¡£

Arrays.asList »ñµÃµÄ List Ó¦¸Ã×¢Òâʲô

Arrays.asList ÊÇ Array ÖеÄÒ»¸ö¾²Ì¬·½·¨,ËüÄܹ»ÊµÏÖ°ÑÊý×éת»»³ÉΪ List ÐòÁÐ,ÐèҪעÒâÏÂÃ漸µã

  • Arrays.asList ת»»Íê³ÉºóµÄ List ²»ÄÜÔÙ½øÐнṹ»¯µÄÐÞ¸Ä,ʲôÊǽṹ»¯µÄÐÞ¸Ä?¾ÍÊDz»ÄÜÔÙ½øÐÐÈκΠList ÔªËصÄÔö¼Ó»òÕß¼õÉٵIJÙ×÷¡£
public static void main(String[] args) {
  Integer[] integer = new Integer[] { 1, 2, 3, 4 };
  List integetList = Arrays.asList(integer);
  integetList.add(5);
}

½á¹û»áÖ±½ÓÅ׳ö

Exception in thread "main" java.lang.UnsupportedOperationException

ÎÒÃÇ¿´Ò»ÏÂÔ´Âë¾ÍÄÜ·¢ÏÖÎÊÌâ

// ÕâÊÇ java.util.Arrays µÄÄÚ²¿Àà,¶ø²»ÊÇ java.util.ArrayList 
private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable

¼Ì³Ð AbstractList ÖÐ¶Ô add¡¢remove¡¢set ·½·¨ÊÇÖ±½ÓÅ×Òì³£µÄ,Ò²¾ÍÊÇ˵Èç¹û¼Ì³ÐµÄ×ÓÀàûÓÐÈ¥ÖØдÕâЩ·½·¨,ÄÇô×ÓÀàµÄʵÀýÈ¥µ÷ÓÃÕâЩ·½·¨ÊÇ»áÖ±½ÓÅ×Òì³£µÄ¡£

ÏÂÃæÊÇAbstractListÖз½·¨µÄ¶¨Òå,ÎÒÃÇ¿ÉÒÔ¿´µ½¾ßÌåÅ׳öµÄÒì³£:

public void add(int index, E element) {
  throw new UnsupportedOperationException();
}
public E remove(int index) {
  throw new UnsupportedOperationException();
}
public E set(int index, E element) {
  throw new UnsupportedOperationException();
}

ËäÈ» set ·½·¨Ò²Å׳öÁËÒ»³¡,µ«ÊÇÓÉÓÚ ÄÚ²¿Àà ArrayList ÖØдÁË set ·½·¨,ËùÒÔÖ§³ÖÆä¿ÉÒÔ¶ÔÔªËؽøÐÐÐ޸ġ£

  • Arrays.asList ²»Ö§³Ö»ù´¡ÀàÐ͵Äת»»

Java ÖеĻù´¡Êý¾ÝÀàÐÍ(byte,short,int,long,float,double,boolean)ÊDz»Ö§³ÖʹÓà Arrays.asList ·½·¨È¥×ª»»µÄ

Collection ºÍ Collections µÄÇø±ð

Collection ºÍ Collections ¶¼ÊÇλÓÚ java.util °üϵÄÀà

Collection ÊǼ¯ºÏÀàµÄ¸¸Àà,ËüÊÇÒ»¸ö¶¥¼¶½Ó¿Ú,´ó²¿·Ö³éÏóÀà±ÈÈç˵ AbstractList¡¢AbstractSet ¶¼¼Ì³ÐÁË Collection Àà,Collection ÀàÖ»¶¨ÒåÒ»½Ú±ê×¼·½·¨±ÈÈç˵ add¡¢remove¡¢set¡¢equals µÈ,¾ßÌåµÄ·½·¨ÓɳéÏóÀà»òÕßʵÏÖÀàȥʵÏÖ¡£

Collections ÊǼ¯ºÏÀàµÄ¹¤¾ßÀà,Collections ÌṩÁËһЩ¹¤¾ßÀàµÄ»ù±¾Ê¹ÓÃ

  • sort ·½·¨,¶Ôµ±Ç°¼¯ºÏ½øÐÐÅÅÐò, ʵÏÖ Comparable ½Ó¿ÚµÄÀà,Ö»ÄÜʹÓÃÒ»ÖÖÅÅÐò·½°¸,ÕâÖÖ·½°¸½Ð×ö×ÔÈ»±È½Ï
  • ±ÈÈçʵÏÖḬ̈߳²È«µÄÈÝÆ÷ Collections.synchronizedList¡¢ Collections.synchronizedMap µÈ
  • reverse ·´×ª,ʹÓà reverse ·½·¨¿ÉÒÔ¸ù¾ÝÔªËصÄ×ÔȻ˳Ðò ¶ÔÖ¸¶¨ÁÐ±í°´½µÐò½øÐÐÅÅÐò¡£
  • fill,ʹÓÃÖ¸¶¨ÔªËØÌæ»»Ö¸¶¨ÁбíÖеÄËùÓÐÔªËØ¡£

ÓкܶàÓ÷¨,¶ÁÕß¿ÉÒÔ·­ÔÄ Collections µÄÔ´Âë²é¿´,Collections ²»ÄܽøÐÐʵÀý»¯,ËùÒÔ Collections Öеķ½·¨¶¼ÊÇÓÉ Collections.·½·¨ Ö±½Óµ÷Óá£

ÄãÖªµÀ fail-fast ºÍ fail-safe Âð

fail-fast ÊÇ Java ÖеÄÒ»ÖÖ¿ìËÙʧ°Ü»úÖÆ,java.util °üÏÂËùÓеļ¯ºÏ¶¼ÊÇ¿ìËÙʧ°ÜµÄ,¿ìËÙʧ°Ü»áÅ׳ö ConcurrentModificationException Òì³£,fail-fast Äã¿ÉÒÔ°ÑËüÀí½âΪһÖÖ¿ìËÙ¼ì²â»úÖÆ,ËüÖ»ÄÜÓÃÀ´¼ì²â´íÎó,²»»á¶Ô´íÎó½øÐлָ´,fail-fast ²»Ò»¶¨Ö»ÔÚ¶àÏ̻߳·¾³Ï´æÔÚ,ArrayList Ò²»áÅ׳öÕâ¸öÒì³£,Ö÷ÒªÔ­ÒòÊÇÓÉÓÚ modCount ²»µÈÓÚ expectedModCount¡£

fail-safe ÊÇ Java ÖеÄÒ»ÖÖ °²È«Ê§°Ü »úÖÆ,Ëü±íʾµÄÊÇÔÚ±éÀúʱ²»ÊÇÖ±½ÓÔÚÔ­¼¯ºÏÉϽøÐзÃÎÊ,¶øÊÇÏȸ´ÖÆÔ­Óм¯ºÏÄÚÈÝ,ÔÚ¿½±´µÄ¼¯ºÏÉϽøÐбéÀú¡£ ÓÉÓÚµü´úʱÊǶÔÔ­¼¯ºÏµÄ¿½±´½øÐбéÀú,ËùÒÔÔÚ±éÀú¹ý³ÌÖжÔÔ­¼¯ºÏËù×÷µÄÐ޸IJ¢²»Äܱ»µü´úÆ÷¼ì²âµ½,ËùÒÔ²»»á´¥·¢ ConcurrentModificationException¡£java.util.concurrent °üϵÄÈÝÆ÷¶¼ÊÇ°²È«Ê§°ÜµÄ,¿ÉÒÔÔÚ¶àÏß³ÌÌõ¼þÏÂʹÓÃ,²¢·¢Ð޸ġ£

ArrayList¡¢LinkedList ºÍ Vector µÄÇø±ð

ÕâÒ²ÊÇÒ»µÀÀÏÉú³£Ì¸µÄÎÊÌâÁË

ArrayList¡¢LinkedList¡¢Vector ¶¼ÊÇλÓÚ java.util °üÏµĹ¤¾ßÀà,ËüÃǶ¼ÊµÏÖÁË List ½Ó¿Ú¡£

  • ArrayList µÄµ×²ãÊǶ¯Ì¬Êý×é,ËüÊÇ»ùÓÚÊý×éµÄÌØÐÔ¶øÑݱä³öÀ´µÄ,ËùÒÔArrayList ±éÀú·ÃÎʷdz£¿ì,µ«ÊÇÔöɾ±È½ÏÂý,ÒòΪ»áÉæ¼°µ½Êý×éµÄ¿½±´¡£ArrayList ÊÇÒ»¸ö·ÇḬ̈߳²È«µÄÈÝÆ÷,ÔÚ²¢·¢³¡¾°Ï»áÔì³ÉÎÊÌâ,Èç¹ûÏëʹÓÃḬ̈߳²È«µÄÈÝÆ÷µÄ»°,ÍƼöʹÓà Collections.synchronizedList;ArrayList ÔÚÀ©ÈÝʱ»áÔö¼Ó 50% µÄÈÝÁ¿¡£
  • LinkedList µÄµ×²ãÊÇË«ÏòÁ´±í,ËùÒÔ LinkedList µÄÔö¼ÓºÍɾ³ý·Ç³£¿ì,Ö»Ðè°ÑÔªËØɾ³ý,°Ñ¸÷×ÔµÄÖ¸ÕëÖ¸ÏòеÄÔªËؼ´¿É¡£µ«ÊÇ LinkedList ±éÀú±È½ÏÂý,ÒòΪֻÓÐÿ´Î·ÃÎÊÒ»¸öÔªËزÅÄÜÖªµÀÏÂÒ»¸öÔªËصÄÖµ¡£LinkedList Ò²ÊÇÒ»¸ö·ÇḬ̈߳²È«µÄÈÝÆ÷,ÍƼöʹÓà Collections.synchronizedList
  • Vector ÏòÁ¿ÊÇ×îÔç³öÏֵļ¯ºÏÈÝÆ÷,Vector ÊÇÒ»¸öḬ̈߳²È«µÄÈÝÆ÷,ËüµÄÿ¸ö·½·¨¶¼´Ö±©µÄ¼ÓÉÏÁË synchronized Ëø,ËùÒÔËüµÄÔöɾ¡¢±éÀúЧÂʶ¼ºÜµÍ¡£Vector ÔÚÀ©ÈÝʱ,ËüµÄÈÝÁ¿»áÔö¼ÓÒ»±¶¡£

Exception ºÍ Error ÓÐʲôÇø±ð

Exception ·ºÖ¸µÄÊÇ Òì³£,Exception Ö÷Òª·ÖΪÁ½ÖÖÒì³£,Ò»ÖÖÊDZàÒëÆÚ³öÏÖµÄÒì³£,³ÆΪ checkedException ,Ò»ÖÖÊdzÌÐòÔËÐÐÆÚ¼ä³öÏÖµÄÒì³£,³ÆΪ uncheckedException,³£¼ûµÄ checkedException ÓÐ IOException,uncheckedException ͳ³ÆΪ RuntimeException,³£¼ûµÄ RuntimeException Ö÷ÒªÓÐNullPointerException¡¢ IllegalArgumentException¡¢ArrayIndexOutofBoundExceptionµÈ,Exception ¿ÉÒÔ±»²¶»ñ¡£

Error ÊÇÖ¸³ÌÐòÔËÐйý³ÌÖгöÏֵĴíÎó,ͨ³£Çé¿öÏ»áÔì³É³ÌÐòµÄ±ÀÀ£,Error ͨ³£ÊDz»¿É»Ö¸´µÄ,Error ²»Äܱ»²¶»ñ¡£

Ïêϸ¿ÉÒԲο¼ÕâƪÎÄÕ ¿´ÍêÕâƪ Exception ºÍ Error ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË

String¡¢StringBuilder ºÍ StringBuffer ÓÐʲôÇø±ð

String ÌØÖ¸µÄÊÇ Java ÖеÄ×Ö·û´®,String ÀàλÓÚ java.lang °üÏÂ,String ÀàÊÇÓÉ final ÐÞÊεÄ,String ×Ö·û´®Ò»µ©´´½¨¾Í²»Äܱ»ÐÞ¸Ä,ÈÎºÎ¶Ô String ½øÐÐÐ޸ĵIJÙ×÷¶¼Ï൱ÓÚÖØд´½¨ÁËÒ»¸ö×Ö·û´®¡£String ×Ö·û´®µÄµ×²ãʹÓà StringBuilder À´ÊµÏÖµÄ

StringBuilder λÓÚ java.util °üÏÂ,StringBuilder ÊÇÒ»·ÇḬ̈߳²È«µÄÈÝÆ÷,StringBuilder µÄ append ·½·¨³£ÓÃÓÚ×Ö·û´®Æ´½Ó,ËüµÄÆ´½ÓЧÂÊÒª±È String ÖÐ + ºÅµÄÆ´½ÓЧÂʸߡ£StringBuilder Ò»°ã²»ÓÃÓÚ²¢·¢»·¾³

StringBuffer λÓÚ java.util °üÏÂ,StringBuffer ÊÇÒ»¸öḬ̈߳²È«µÄÈÝÆ÷,¶àÏ̳߳¡¾°ÏÂÒ»°ãʹÓà StringBuffer ÓÃ×÷×Ö·û´®µÄÆ´½Ó

StringBuilder ºÍ StringBuffer ¶¼ÊǼ̳ÐÓÚAbstractStringBuilder Àà,AbstractStringBuilder ÀàʵÏÖÁË StringBuffer ºÍ StringBuilder µÄ³£¹æ²Ù×÷¡£

ÉîÈëÀí½â¿ÉÒԲο¼Ò»ÏÂÕâƪÎÄÕ ÉîÈëÀí½â String¡¢StringBuilder ºÍ StringBuffer

¶¯Ì¬´úÀíÊÇ»ùÓÚʲôԭÀí

´úÀíÒ»°ã·ÖΪ¾²Ì¬´úÀíºÍ ¶¯Ì¬´úÀí,ËüÃǶ¼ÊÇ´úÀíģʽµÄÒ»ÖÖÓ¦ÓÃ,¾²Ì¬´úÀíÖ¸µÄÊÇÔÚ³ÌÐòÔËÐÐÇ°ÒѾ­±àÒëºÃ,³ÌÐòÖªµÀÓÉË­À´Ö´ÐдúÀí·½·¨¡£

¶ø¶¯Ì¬´úÀíÖ»ÓÐÔÚ³ÌÐòÔËÐÐÆÚ¼ä²ÅÄÜÈ·¶¨,Ïà±ÈÓÚ¾²Ì¬´úÀí, ¶¯Ì¬´úÀíµÄÓÅÊÆÔÚÓÚ¿ÉÒԺܷ½±ãµÄ¶Ô´úÀíÀàµÄº¯Êý½øÐÐͳһµÄ´¦Àí,¶ø²»ÓÃÐÞ¸Äÿ¸ö´úÀíÀàÖеķ½·¨¡£¿ÉÒÔ˵¶¯Ì¬´úÀíÊÇ»ùÓÚ ·´Éä ʵÏֵġ£Í¨¹ý·´ÉäÎÒÃÇ¿ÉÒÔÖ±½Ó²Ù×÷Àà»òÕ߶ÔÏó,±ÈÈç»ñÈ¡ÀàµÄ¶¨Òå,»ñÈ¡ÉùÃ÷µÄÊôÐԺͷ½·¨,µ÷Ó÷½·¨,ÔÚÔËÐÐʱ¿ÉÒÔÐÞ¸ÄÀàµÄ¶¨Òå¡£

¶¯Ì¬´úÀíÊÇÒ»ÖÖÔÚÔËÐÐʱ¹¹½¨´úÀí¡¢¶¯Ì¬´¦Àí·½·¨µ÷ÓõĻúÖÆ¡£¶¯Ì¬´úÀíµÄʵÏÖ·½Ê½Óкܶà,Java ÌṩµÄ´úÀí±»³ÆΪ JDK ¶¯Ì¬´úÀí,JDK ¶¯Ì¬´úÀíÊÇ»ùÓÚÀàµÄ¼Ì³Ð¡£

Àí½â¶¯Ì¬´úÀí¿ÉÒԲο¼ÕâƪÎÄÕ ¶¯Ì¬´úÀíÉîÈëÀí½â

¶¯Ì¬´úÀíµÄ¼¸ÖÖʵÏÖ·½Ê½

¶¯Ì¬´úÀíµÄʵÏÖ·½Ê½ÎÒ¸øÄãÂÞÁÐËÄÖÖ,·Ö±ðÊÇ

  • JDK ¶¯Ì¬´úÀí:JDK ¶¯Ì¬´úÀíÒ²ÊÇ Java ¶¯Ì¬´úÀí,ËüÊÇ»ùÓڽӿڵĶ¯Ì¬´úÀí,Ëüͨ³£´úÀí½Ó¿ÚϵÄËùÓÐÀà¡£
  • CGLIB ¶¯Ì¬´úÀí:CGLIB ¶¯Ì¬´úÀíÊÇÕë¶ÔÀàʵÏÖ´úÀí,Ö÷ÒªÊǶÔÖ¸¶¨µÄÀàÉú³ÉÒ»¸ö×ÓÀà,¸²¸ÇÆäÖеķ½·¨ ,Ò²¾ÍÊÇ˵ CGLIB ¶¯Ì¬´úÀí²ÉÓÃÀà¼Ì³Ð -> ·½·¨ÖØдµÄ·½Ê½½øÐеġ£
  • Javassist ´úÀí:JavassistÊÇÔÚ Java Öб༭×Ö½ÚÂëµÄÀà¿â;Ëüʹ Java ³ÌÐòÄܹ»ÔÚÔËÐÐʱ¶¨ÒåÒ»¸öÐÂÀà, ²¢ÔÚ JVM ¼ÓÔØʱÐÞ¸ÄÀàÎļþ¡£
  • ASM ´úÀí:ASM ÊÇÒ»Ì× Java ×Ö½ÚÂëÉú³É¼Ü¹¹,Ëü¿ÉÒÔ¶¯Ì¬Éú³É¶þ½øÖƸñʽµÄ×ÓÀà»òÆäËü´úÀíÀà,»òÕßÔÚÀà±» Java ÐéÄâ»ú×°ÈëÄÚ´æ֮ǰ,¶¯Ì¬ÐÞ¸ÄÀà¡£

¹ØÓÚÕâËÄÖÖ×Ö½ÚÂëµÄʵÏÖ¿ÉÒԲο¼ ¶¯Ì¬´úÀí¾¹È»Èç´Ë¼òµ¥!

½âÊÍÏ Serialization ºÍ Deserialization

Serialization ±íʾµÄÊÇÐòÁл¯,ʵÏÖÐòÁл¯ºÍ·´ÐòÁл¯µÄ¶ÔÏó±ØÐëʵÏÖ serializable ½Ó¿Ú,ÐòÁл¯Êǽ«¶ÔÏó±ä³É×Ö½ÚÁ÷,´æ´¢µ½´ÅÅÌ»òÍøÂçÖС£·´ÐòÁл¯ÊÇÐòÁл¯µÄ·´¹ý³Ì¡£

ÎÒÔÚѧµ½ÐòÁл¯µÄʱºò¾Í¾­³£ÓиöÒÉÎÊ,Ϊʲô¶ÔÏóÐèÒªÐòÁл¯ÄØ?

ΪÁËÊý¾Ý´«ÊäµÄÄ¿µÄ,ÒòΪÕâ¸ö¶ÔÏóÔÚÄã´úÂëÖÐÊǶÔÏó¸ñʽ,µ«ÊÇËüÔÚ´«ÊäµÄ¹ý³ÌÖпɲ»ÊǶÔÏó¸ñʽ,ËùÒÔ,µ±ÆäËû½ø³Ì»òÕßÆäËû»úÆ÷ÏëÒªºÍÄãͨÐÅʱ,ÄãÃÇË«·½»á·¢Ë͸÷ÖÖÀàÐ͵ÄÊý¾Ý,Ò²ÓпÉÄÜ»á°ÑÕâ¸ö¶ÔÏó·¢Ë͹ýÈ¥,ËùÒÔÕâ¸ö¶ÔÏóÊƱػáת»»ÎªÄܹ»ÔÚÍøÂçÖлòÕß´ÅÅÌÖÐÄܹ»Ê¶±ðµÄ¸ñʽ,Ò²¾ÍÊǶþ½øÖÆ¡£

ÕâÒ²¾ÍÊÇ˵,·¢ËÍ·½ÐèÒª°ÑÕâ¸ö Java ¶ÔÏóת»»Îª×Ö½ÚÐòÁÐ,²ÅÄÜÔÚÍøÂçÉÏ´«ËÍ;½ÓÊÕ·½ÔòÐèÒª°Ñ×Ö½ÚÐòÁÐÔÙ»Ö¸´Îª Java ¶ÔÏó,ÕâÒ²ÊÇ Deserialization ½Ó¿ÚËù×öµÄ¹¤×÷¡£

int ºÍ Integer µÄÇø±ð

int ºÍ Integer Çø±ð¿É¾ÍÌ«¶àÁË

  • int ÊÇ Java ÖеĻù±¾Êý¾ÝÀàÐÍ,int ´ú±íµÄÊÇ ÕûÐÍ,Ò»¸ö int Õ¼ 4 ×Ö½Ú,Ò²¾ÍÊÇ 32 λ,int µÄ³õʼֵÊÇĬÈÏÖµÊÇ 0 ,int ÔÚ Java ÄÚ´æÄ£ÐÍÖб»·ÖÅäÔÚÕ»ÖÐ,int ûÓз½·¨¡£
  • Integer ÊÇ Java ÖеĻù±¾Êý¾ÝÀàÐ͵İü×°Àà,Integer ÊÇÒ»¸ö¶ÔÏó,Integer ¿ÉÒÔ½øÐз½·¨µ÷ÓÃ,Integer µÄĬÈÏÖµÊÇ null,Integer ÔÚ Java ÄÚ´æÄ£ÐÍÖб»·ÖÅäÔÚ¶ÑÖС£int ºÍ Integer ÔÚ¼ÆËãʱ¿ÉÒÔ½øÐÐÏ໥ת»»,int -> Integer µÄ¹ý³Ì³ÆΪ ×°Ïä,Integer -> int µÄ¹ý³Ì³ÆΪ ²ðÏä,Integer »¹ÓÐ IntegerCache ,»á×Ô¶¯»º´æ -128 - 127 ÖеÄÖµ

ÉîÈëÀí½â²ðÏäºÍ×°Ïä¿ÉÒԲο¼ÕâƪÎÄÕ Ïê½â Java ÖеÄ×Ô¶¯×°ÏäÓë²ðÏä

Java ÌṩÁËÄÄЩ I/O ·½Ê½

Java I/O ·½Ê½ÓкܶàÖÖ,´«Í³µÄ I/O Ò²³ÆΪ BIO,Ö÷ÒªÁ÷ÓÐÈçϼ¸ÖÖ¡£

Java I/O °üµÄʵÏֱȽϼòµ¥,µ«ÊÇÈÝÒ׳öÏÖÐÔÄÜÆ¿¾±,´«Í³µÄ I/O ÊÇ»ùÓÚͬ²½×èÈûµÄ¡£

JDK 1.4 Ö®ºóÌṩÁË NIO,Ò²¾ÍÊÇλÓÚ java.nio °üÏÂ,ÌṩÁË»ùÓÚ channel¡¢Selector¡¢BufferµÄ³éÏó,¿ÉÒÔ¹¹½¨¶à·¸´Óá¢Í¬²½·Ç×èÈû I/O ³ÌÐò¡£

JDK 1.7 Ö®ºó¶Ô NIO ½øÐÐÁ˽øÒ»²½¸Ä½ø,ÒýÈëÁË Òì²½·Ç×èÈû µÄ·½Ê½,Ò²±»³ÆΪ AIO(Asynchronous IO)¡£¿ÉÒÔÓÃÉú»îÖеÄÀý×ÓÀ´ËµÃ÷:ÏîÄ¿¾­Àí½»¸øÊÖÏÂÔ±¹¤È¥¸ÄÒ»¸ö bug,ÄÇôÏîÄ¿¾­Àí²»»áÒ»Ö±µÈ´ýÔ±¹¤½â¾ö bug,Ëû¿Ï¶¨ÔÚÔ±¹¤½â¾ö bug µÄÆÚ¼ä¸øÆäËûÊÖÏ·ÖÅä bug »òÕß×öÆäËûÊÂÇé,Ô±¹¤½â¾öÍê bug Ö®ºóÔÙ¸æËßÏîÄ¿¾­Àí bug ½â¾öÍêÁË¡£

ÉîÈëÀí½â IO ¿ÉÒԲο¼ÕâƪÎÄÕ ÉîÈëÀí½â IO ¡£

̸̸ÄãÖªµÀµÄÉè¼Æģʽ

Ò»ÕÅ˼άµ¼Í¼Õò³¡

±ÈÈçÈ«¾ÖΨһÐÔ¿ÉÒÔÓà µ¥Àýģʽ¡£

¿ÉÒÔʹÓà ²ßÂÔģʽ ÓÅ»¯¹ý¶àµÄ if¡­else¡­

Öƶ¨±ê×¼Óà ģ°æģʽ

½ÓÊÖÆäËûÈ˵Ĺø,µ«²»Ïë¸ÄÔ­À´µÄÀàÓà ÊÊÅäÆ÷ģʽ

ʹÓà ×éºÏ ¶ø²»ÊǼ̳Ð

ʹÓà װÊÎÆ÷¿ÉÒÔÖÆ×÷¼ÓÌÇ¡¢¼ÓÄÌÀҵĿ§·È

´úÀí ¿ÉÒÔÓÃÓÚÈκÎÖмäÉÌ¡­

д³ö¼¸ÖÖµ¥ÀýģʽʵÏÖ

ÕâÒ²ÊÇÒ»µÀÀÏÉú³£Ì¸µÄÃæÊÔÌâÁË,Ò»°ã²»»áÈÃÄãÊÖдµ¥Àýģʽ¡£¾ÍËãÊÇÊÖдµÄ»°,Ö»ÐèҪд³ö¹Ø¼ü´úÂëÀ´¾Í¿ÉÒÔÁË¡£ÕâµÀÌâÆäʵÏëÎʵÄÊǵ¥ÀýģʽµÄ¼¸ÖÖʵÏÖ·½Ê½,²¢ÇÒÿÖÖʵÏÖ·½Ê½ÓÐûÓÐʲôÎÊÌâ¡£

Ò»°ã¿ÉÒÔÕâÑù»Ø´ðÏÂ

  • ¶öººÊ½:Ḭ̈߳²È«,µ÷ÓÃЧÂʸß,µ«ÊDz»ÄÜÑÓʱ¼ÓÔØ
  • ÀÁººÊ½:Ḭ̈߳²È«,µ÷ÓÃЧÂʲ»¸ß,µ«ÊÇÄÜÑÓʱ¼ÓÔØ
  • Double CheckLock ʵÏÖµ¥Àý:DCL Ò²¾ÍÊÇË«ÖØËøÅжϻúÖÆ(ÓÉÓÚJVMµ×²ãÄ£ÐÍÔ­Òò,ż¶û»á³öÎÊÌâ,²»½¨ÒéʹÓÃ
  • ¾²Ì¬ÄÚ²¿ÀàʵÏÖģʽ:Ḭ̈߳²È«,µ÷ÓÃЧÂʸß,¿ÉÒÔÑÓʱ¼ÓÔØ
  • ö¾ÙÀà:Ḭ̈߳²È«,µ÷ÓÃЧÂʸß,²»ÄÜÑÓʱ¼ÓÔØ,¿ÉÒÔÌìÈ»µÄ·ÀÖ¹·´ÉäºÍ·´ÐòÁл¯µ÷ÓÃ

Èç¹ûÏëÒªÉîÈëÁ˽âÕâµÀÃæÊÔÌâ,¿ÉÒÔ²éÔÄ ÎÒÏòÃæÊÔ¹Ù½²½âÁ˵¥Àýģʽ,Ëû¶ÔÎÒÊúÆðÁË´óÄ´Ö¸

Comparator ºÍ Comparable ÓÐʲô²»Í¬

  • Comparable ¸üÏñÊÇ×ÔÈ»ÅÅÐò

  • Comparator ¸üÏñÊǶ¨ÖÆÅÅÐò

ͬʱ´æÔÚʱ²ÉÓà Comparator(¶¨ÖÆÅÅÐò)µÄ¹æÔò½øÐбȽϡ£

¶ÔÓÚһЩÆÕͨµÄÊý¾ÝÀàÐÍ(±ÈÈç String, Integer, Double¡­),ËüÃÇĬÈÏʵÏÖÁËComparable ½Ó¿Ú,ʵÏÖÁË compareTo ·½·¨,ÎÒÃÇ¿ÉÒÔÖ±½ÓʹÓá£

¶ø¶ÔÓÚһЩ×Ô¶¨ÒåÀà,ËüÃÇ¿ÉÄÜÔÚ²»Í¬Çé¿öÏÂÐèҪʵÏÖ²»Í¬µÄ±È½Ï²ßÂÔ,ÎÒÃÇ¿ÉÒÔд´½¨ Comparator ½Ó¿Ú,È»ºóʹÓÃÌض¨µÄ Comparator ʵÏÖ½øÐбȽϡ£

¹ØÓÚ Comparator ºÍ Comparable µÄÉîÈëÀí½â,¿ÉÒԲο¼ÕâƪÎÄÕ Comparable ºÍ ComparatorµÄÀí½â¡£

Object ÀàÖÐÒ»°ã¶¼ÓÐÄÄЩ·½·¨

Object ÀàÊÇËùÓжÔÏóµÄ¸¸Àà,ËüÀïÃæ°üº¬Ò»Ð©ËùÓжÔÏó¶¼Äܹ»Ê¹Óõķ½·¨

  • hashCode():ÓÃÓÚ¼ÆËã¶ÔÏóµÄ¹þÏ£Âë
  • equals():ÓÃÓÚ¶ÔÏóÖ®¼ä±È½ÏÖµÊÇ·ñÏàµÈ
  • toString(): ÓÃÓڰѶÔÏóת»»³ÉΪ×Ö·û´®
  • clone(): ÓÃÓÚ¶ÔÏóÖ®¼äµÄ¿½±´
  • wait(): ÓÃÓÚʵÏÖ¶ÔÏóÖ®¼äµÄµÈ´ý
  • notify(): ÓÃÓÚ֪ͨ¶ÔÏóÊÍ·Å×ÊÔ´
  • notifyAll(): ÓÃÓÚ֪ͨËùÓжÔÏóÊÍ·Å×ÊÔ´
  • finalize(): ÓÃÓÚ¸æÖªÀ¬»ø»ØÊÕÆ÷½øÐÐÀ¬»ø»ØÊÕ
  • getClass(): ÓÃÓÚ»ñµÃ¶ÔÏóÀà

Java ·ºÐͺÍÀàÐͲÁ³ý

¹ØÓÚ Java ·ºÐͺͲÁ³ý¿´×Åһƪ¾Í¹»ÁË¡£

·´ÉäµÄ»ù±¾Ô­Àí,·´Éä´´½¨ÀàʵÀýµÄÈýÖÖ·½Ê½ÊÇʲô

·´Éä»úÖƾÍÊÇʹ Java ³ÌÐòÔÚÔËÐÐʱ¾ßÓÐ×ÔÊ¡(introspect) µÄÄÜÁ¦,ͨ¹ý·´ÉäÎÒÃÇ¿ÉÒÔÖ±½Ó²Ù×÷ÀàºÍ¶ÔÏó,±ÈÈç»ñȡij¸öÀàµÄ¶¨Òå,»ñÈ¡ÀàµÄÊôÐԺͷ½·¨,¹¹Ôì·½·¨µÈ¡£

´´½¨ÀàʵÀýµÄÈýÖÖ·½Ê½ÊÇ

  • ¶ÔÏóʵÀý.getClass();
  • ͨ¹ý Class.forName() ´´½¨
  • ¶ÔÏóʵÀý.newInstance() ·½·¨´´½¨

ÉîÈëÀí½â·´ÉäµÄÎÄÕÂ,Çë²éÔÄ Ñ§»á·´Éäºó,ÎÒ±»Â¼È¡ÁË!(¸É»õ)

Ç¿ÒýÓá¢ÈôÒýÓá¢ÐéÒýÓúͻÃÏóÒýÓõÄÇø±ð

ÎÒÃÇ˵µÄ²»Í¬µÄÒýÓÃÀàÐÍÆäʵ¶¼ÊÇÂß¼­ÉϵÄ,¶ø¶ÔÓÚÐéÄâ»úÀ´Ëµ,Ö÷ÒªÌåÏÖµÄÊǶÔÏóµÄ²»Í¬µÄ¿É´ïÐÔ(reachable) ״̬ºÍ¶ÔÀ¬»øÊÕ¼¯(garbage collector)µÄÓ°Ïì¡£

¿ÉÒÔͨ¹ýÏÂÃæµÄÁ÷³ÌÀ´¶Ô¶ÔÏóµÄÉúÃüÖÜÆÚ×öÒ»¸ö×ܽá

¶ÔÏó±»´´½¨²¢³õʼ»¯,¶ÔÏóÔÚÔËÐÐʱ±»Ê¹ÓÃ,È»ºóÀ뿪¶ÔÏóµÄ×÷ÓÃÓò,¶ÔÏó»á±ä³É²»¿É´ï²¢»á±»À¬»øÊÕ¼¯Æ÷»ØÊÕ¡£Í¼ÖÐÓúìÉ«±êÃ÷µÄÇøÓò±íʾ¶ÔÏó´¦ÓÚÇ¿¿É´ï½×¶Î¡£

JDK1.2 ½éÉÜÁË java.lang.ref °ü,¶ÔÏóµÄÉúÃüÖÜÆÚÓÐËĸö½×¶Î:􏲧Ç¿¿É´ï􏰛(Strongly Reachable􏰜)¡¢Èí¿É´ï(Soft Reachable􏰜)¡¢Èõ¿É´ï(Weak Reachable􏰜)¡¢ »ÃÏó¿É´ï(Phantom Reachable􏰜)¡£

Èç¹ûÖ»ÌÖÂÛ·ûºÏÀ¬»ø»ØÊÕÌõ¼þµÄ¶ÔÏó,ÄÇôֻÓÐÈýÖÖ:Èí¿É´ï¡¢Èõ¿É´ïºÍ»ÃÏó¿É´ï¡£

  • Èí¿É´ï:Èí¿É´ï¾ÍÊÇ􏱬ÎÒÃÇÖ»ÄÜͨ¹ýÈíÒýÓÃ􏳂²ÅÄÜ·ÃÎʵÄ״̬,Èí¿É´ïµÄ¶ÔÏóÊÇÓÉ SoftReference ÒýÓõĶÔÏó,²¢ÇÒûÓÐÇ¿ÒýÓõĶÔÏó¡£ÈíÒýÓÃÊÇÓÃÀ´ÃèÊöһЩ»¹ÓÐÓõ«ÊǷDZØÐëµÄ¶ÔÏó¡£À¬»øÊÕ¼¯Æ÷»á¾¡¿ÉÄܳ¤Ê±¼äµÄ±£ÁôÈíÒýÓõĶÔÏó,µ«ÊÇ»áÔÚ·¢Éú OutOfMemoryError ֮ǰ,»ØÊÕÈíÒýÓõĶÔÏó¡£Èç¹û»ØÊÕÍêÈíÒýÓõĶÔÏó,Äڴ滹ÊDz»¹»·ÖÅäµÄ»°,¾Í»áÖ±½ÓÅ׳ö OutOfMemoryError¡£

  • Èõ¿É´ï:Èõ¿É´ïµÄ¶ÔÏóÊÇ WeakReference ÒýÓõĶÔÏó¡£À¬»øÊÕ¼¯Æ÷¿ÉÒÔËæʱÊÕ¼¯ÈõÒýÓõĶÔÏó,²»»á³¢ÊÔ±£ÁôÈíÒýÓõĶÔÏó¡£

  • »ÃÏó¿É´ï:»ÃÏó¿É´ïÊÇÓÉ PhantomReference ÒýÓõĶÔÏó,»ÃÏó¿É´ï¾ÍÊÇûÓÐÇ¿¡¢Èí¡¢ÈõÒýÓýøÐйØÁª,²¢ÇÒÒѾ­±» finalize ¹ýÁË,Ö»ÓлÃÏóÒýÓÃÖ¸ÏòÕâ¸ö¶ÔÏóµÄʱºò¡£

³ý´ËÖ®Íâ,»¹ÓÐÇ¿¿É´ïºÍ²»¿É´ïµÄÁ½ÖÖ¿É´ïÐÔÅжÏÌõ¼þ

  • Ç¿¿É´ï:¾ÍÊÇÒ»¸ö¶ÔÏó¸Õ±»´´½¨¡¢³õʼ»¯¡¢Ê¹ÓÃÖеĶÔÏó¶¼ÊÇ´¦ÓÚÇ¿¿É´ïµÄ״̬
  • ²»¿É´ï(unreachable):´¦ÓÚ²»¿É´ïµÄ¶ÔÏó¾ÍÒâζ×ŶÔÏó¿ÉÒÔ±»Çå³ýÁË¡£

ÏÂÃæÊÇÒ»¸ö²»Í¬¿É´ïÐÔ״̬µÄת»»Í¼

ÅжϿɴïÐÔÌõ¼þ,Ò²ÊÇ JVM À¬»øÊÕ¼¯Æ÷¾ö¶¨ÈçºÎ´¦Àí¶ÔÏóµÄÒ»²¿·Ö¿¼ÂÇÒòËØ¡£

ËùÓеĶÔÏó¿É´ïÐÔÒýÓö¼ÊÇ java.lang.ref.Reference µÄ×ÓÀà,ËüÀïÃæÓÐÒ»¸öget() ·½·¨,·µ»ØÒýÓöÔÏó¡£ Èç¹ûÒÑͨ¹ý³ÌÐò»òÀ¬»øÊÕ¼¯Æ÷Çå³ýÁË´ËÒýÓöÔÏó,Ôò´Ë·½·¨·µ»Ø null ¡£Ò²¾ÍÊÇ˵,³ýÁË»ÃÏóÒýÓÃÍâ,ÈíÒýÓúÍÈõÒýÓö¼ÊÇ¿ÉÒԵõ½¶ÔÏóµÄ¡£¶øÇÒÕâЩ¶ÔÏó¿ÉÒÔÈËΪÕü¾È,±äΪǿÒýÓÃ,ÀýÈç°Ñ this ¹Ø¼ü×Ö¸³Öµ¸ø¶ÔÏó,Ö»ÒªÖØкÍÒýÓÃÁ´ÉϵÄÈÎÒâÒ»¸ö¶ÔÏó½¨Á¢¹ØÁª¼´¿É¡£

ÉîÈëÀí½âÒýÓÃÎÊÌâ,¿ÉÒÔ¿´¿´ÕâһƪÎÄÕ ÉîÈëÀí½â¸÷ÖÖÒýÓÃÎÊÌâ¡£

final¡¢finally ºÍ finalize() µÄÇø±ð

ÕâÈýÕß¿ÉÒÔ˵ÊÇûÓÐÈκιØÁªÖ®´¦,ÎÒÃÇÉÏÃæ̸µ½ÁË,final ¿ÉÒÔÓÃÀ´ÐÞÊÎÀà¡¢±äÁ¿ºÍ·½·¨,¿ÉÒԲο¼ÉÏÃæ final µÄÄǵÀÃæÊÔÌâ¡£

finally ÊÇÒ»¸ö¹Ø¼ü×Ö,Ëü¾­³£ºÍ try ¿éÒ»ÆðʹÓÃ,ÓÃÓÚÒì³£´¦Àí¡£Ê¹Óà try¡­finally µÄ´úÂë¿éÖÖ,finally ²¿·ÖµÄ´úÂëÒ»¶¨»á±»Ö´ÐÐ,ËùÒÔÎÒÃǾ­³£ÔÚ finally ·½·¨ÖÐÓÃÓÚ×ÊÔ´µÄ¹Ø±Õ²Ù×÷¡£

JDK1.7 ÖÐ,ÍƼöʹÓà try-with-resources ÓÅÑŵĹرÕ×ÊÔ´,ËüÖ±½ÓʹÓà try(){} ½øÐÐ×ÊÔ´µÄ¹Ø±Õ¼´¿É,¾Í²»ÓÃд finally ¹Ø¼ü×ÖÁË¡£

finalize ÊÇ Object ¶ÔÏóÖеÄÒ»¸ö·½·¨,ÓÃÓÚ¶ÔÏóµÄ»ØÊÕ·½·¨,Õâ¸ö·½·¨ÎÒÃÇÒ»°ã²»ÍƼöʹÓÃ,finalize ÊǺÍÀ¬»ø»ØÊÕ¹ØÁªÔÚÒ»ÆðµÄ,ÔÚ Java 9 ÖÐ,½« finalize ±ê¼ÇΪÁË deprecated, Èç¹ûûÓÐÌرðÔ­Òò,²»ÒªÊµÏÖ finalize ·½·¨,Ò²²»ÒªÖ¸ÍûËûÀ´½øÐÐÀ¬»ø»ØÊÕ¡£

ÉîÈëÀí½â final¡¢finally ºÍ finalize ,¿ÉÒÔ¿´¿´Õâһƪ ¿´ÍêÕâƪ final¡¢finally ºÍ finalize ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË¡£

ÄÚ²¿ÀàÓÐÄÄЩ·ÖÀà,·Ö±ð½âÊÍÒ»ÏÂ

ÔÚ Java ÖÐ,¿ÉÒÔ½«Ò»¸öÀàµÄ¶¨Òå·ÅÔÚÁíÍâÒ»¸öÀàµÄ¶¨ÒåÄÚ²¿,Õâ¾ÍÊÇÄÚ²¿Àà¡£ÄÚ²¿Àà±¾Éí¾ÍÊÇÀàµÄÒ»¸öÊôÐÔ,ÓëÆäËûÊôÐÔ¶¨Ò巽ʽһÖ¡£

ÄÚ²¿ÀàµÄ·ÖÀàÒ»°ãÖ÷ÒªÓÐËÄÖÖ

  • ³ÉÔ±ÄÚ²¿Àà
  • ¾Ö²¿ÄÚ²¿Àà
  • ÄäÃûÄÚ²¿Àà
  • ¾²Ì¬ÄÚ²¿Àà

¾²Ì¬ÄÚ²¿Àà¾ÍÊǶ¨ÒåÔÚÀàÄÚ²¿µÄ¾²Ì¬Àà,¾²Ì¬ÄÚ²¿Àà¿ÉÒÔ·ÃÎÊÍⲿÀàËùÓеľ²Ì¬±äÁ¿,¶ø²»¿É·ÃÎÊÍⲿÀàµÄ·Ç¾²Ì¬±äÁ¿;

³ÉÔ±ÄÚ²¿Àà ¾ÍÊǶ¨ÒåÔÚÀàÄÚ²¿,³ÉԱλÖÃÉϵķǾ²Ì¬Àà,¾ÍÊdzÉÔ±ÄÚ²¿Àà¡£³ÉÔ±ÄÚ²¿Àà¿ÉÒÔ·ÃÎÊÍⲿÀàËùÓеıäÁ¿ºÍ·½·¨,°üÀ¨¾²Ì¬ºÍ·Ç¾²Ì¬,˽Óк͹«ÓС£

¶¨ÒåÔÚ·½·¨ÖеÄÄÚ²¿Àà,¾ÍÊǾֲ¿ÄÚ²¿Àà¡£¶¨ÒåÔÚʵÀý·½·¨Öеľֲ¿Àà¿ÉÒÔ·ÃÎÊÍⲿÀàµÄËùÓбäÁ¿ºÍ·½·¨,¶¨ÒåÔÚ¾²Ì¬·½·¨Öеľֲ¿ÀàÖ»ÄÜ·ÃÎÊÍⲿÀàµÄ¾²Ì¬±äÁ¿ºÍ·½·¨¡£

ÄäÃûÄÚ²¿Àà ¾ÍÊÇûÓÐÃû×ÖµÄÄÚ²¿Àà,³ýÁËûÓÐÃû×Ö,ÄäÃûÄÚ²¿À໹ÓÐÒÔÏÂÌصã:

  • ÄäÃûÄÚ²¿Àà±ØÐë¼Ì³ÐÒ»¸ö³éÏóÀà»òÕßʵÏÖÒ»¸ö½Ó¿Ú
  • ÄäÃûÄÚ²¿À಻Äܶ¨ÒåÈκξ²Ì¬³ÉÔ±ºÍ¾²Ì¬·½·¨¡£
  • µ±ËùÔڵķ½·¨µÄÐβÎÐèÒª±»ÄäÃûÄÚ²¿ÀàʹÓÃʱ,±ØÐëÉùÃ÷Ϊ final¡£
  • ÄäÃûÄÚ²¿À಻ÄÜÊdzéÏóµÄ,Ëü±ØÐëҪʵÏּ̳еÄÀà»òÕßʵÏֵĽӿڵÄËùÓгéÏó·½·¨¡£

˵³ö¼¸ÖÖ³£ÓõÄÒì³£

  • NullPointerException: ¿ÕÖ¸ÕëÒì³£
  • NoSuchMethodException:ÕÒ²»µ½·½·¨
  • IllegalArgumentException:²»ºÏ·¨µÄ²ÎÊýÒì³£
  • IndexOutOfBoundException: Êý×éϱêÔ½½çÒì³£
  • IOException:ÓÉÓÚÎļþδÕÒµ½¡¢Î´´ò¿ª»òÕßI/O²Ù×÷²»ÄܽøÐжøÒýÆðÒì³£
  • ClassNotFoundException :ÕÒ²»µ½ÎļþËùÅ׳öµÄÒì³£
  • NumberFormatException: ×Ö·ûµÄUTF´úÂëÊý¾Ý¸ñʽÓдíÒýÆðÒì³£;
  • InterruptedException: Ïß³ÌÖжÏÅ׳öµÄÒì³£

¾²Ì¬°ó¶¨ºÍ¶¯Ì¬°ó¶¨µÄÇø±ð

Ò»¸öJava ³ÌÐòÒª¾­¹ý±àд¡¢±àÒë¡¢ÔËÐÐÈý¸ö²½Öè,ÆäÖбàд´úÂë²»ÔÚÎÒÃÇÌÖÂ۵ķ¶Î§Ö®ÄÚ,ÄÇôÎÒÃǵÄÖصã×ÔÈ»¾Í·ÅÔÚÁ˱àÒë ºÍ ÔËÐÐÕâÁ½¸ö½×¶Î,ÓÉÓÚ±àÒëºÍÔËÐн׶ιý³ÌÏ൱·±Ëö,ÏÂÃæ¾ÍÎÒµÄÀí½âÀ´½øÐнâÊÍ:

Java ³ÌÐò´ÓÔ´Îļþ´´½¨µ½³ÌÐòÔËÐÐÒª¾­¹ýÁ½´ó²½Öè:

1¡¢±àÒëʱÆÚÊÇÓɱàÒëÆ÷½«Ô´Îļþ±àÒë³É×Ö½ÚÂëµÄ¹ý³Ì

2¡¢×Ö½ÚÂëÎļþÓÉJavaÐéÄâ»ú½âÊÍÖ´ÐÐ

°ó¶¨

°ó¶¨¾ÍÊÇÒ»¸ö·½·¨µÄµ÷ÓÃÓëµ÷ÓÃÕâ¸ö·½·¨µÄÀàÁ¬½ÓÔÚÒ»ÆðµÄ¹ý³Ì±»³ÆΪ°ó¶¨¡£

°ó¶¨Ö÷Òª·ÖΪÁ½ÖÖ:

¾²Ì¬°ó¶¨ ºÍ ¶¯Ì¬°ó¶¨

°ó¶¨µÄÆäËû½Ð·¨

¾²Ì¬°ó¶¨ == Ç°ÆÚ°ó¶¨ == ±àÒëʱ°ó¶¨

¶¯Ì¬°ó¶¨ == ºóÆÚ°ó¶¨ == ÔËÐÐʱ°ó¶¨

ΪÁË·½±ãÇø·Ö: ÏÂÃæͳһ³ÆºôΪ¾²Ì¬°ó¶¨ºÍ¶¯Ì¬°ó¶¨

¾²Ì¬°ó¶¨

ÔÚ³ÌÐòÔËÐÐÇ°,Ò²¾ÍÊDZàÒëʱÆÚ JVM ¾ÍÄܹ»È·¶¨·½·¨ÓÉË­µ÷ÓÃ,ÕâÖÖ»úÖƳÆΪ¾²Ì¬°ó¶¨

ʶ±ð¾²Ì¬°ó¶¨µÄÈý¸ö¹Ø¼ü×ÖÒÔ¼°¸÷×ÔµÄÀí½â

Èç¹ûÒ»¸ö·½·¨ÓÉ private¡¢static¡¢final ÈÎÒâÒ»¸ö¹Ø¼ü×ÖËùÐÞÊÎ,ÄÇôÕâ¸ö·½·¨ÊÇÇ°Æڰ󶨵Ä

¹¹Ôì·½·¨Ò²ÊÇÇ°ÆÚ°ó¶¨

private:private ¹Ø¼ü×ÖÊÇ˽ÓеÄÒâ˼,Èç¹û±» private ÐÞÊεķ½·¨ÊÇÎÞ·¨Óɱ¾ÀàÖ®ÍâµÄÆäËûÀàËùµ÷ÓõÄ,Ò²¾ÍÊDZ¾ÀàËùÌØÓеķ½·¨,ËùÒÔÒ²¾ÍÓɱàÒëÆ÷ʶ±ð´Ë·½·¨ÊÇÊôÓÚÄĸöÀàµÄ

public class Person {

    private String talk;

    private String canTalk(){
        return talk;
    }
}

class Animal{

    public static void main(String[] args) {
        Person p = new Person();
        // private ÐÞÊεķ½·¨ÊÇPersonÀà¶ÀÓеÄ,ËùÒÔAnimalÀàÎÞ·¨·ÃÎÊ(¶¯Îï±¾À´¾Í²»ÄÜ˵»°)
//        p.canTalk();
    }
}

final:final ÐÞÊεķ½·¨²»Äܱ»ÖØд,µ«ÊÇ¿ÉÒÔÓÉ×ÓÀà½øÐе÷ÓÃ,Èç¹û½«·½·¨ÉùÃ÷Ϊ final ¿ÉÒÔÓÐЧµÄ¹Ø±Õ¶¯Ì¬°ó¶¨

public class Fruit {

    private String fruitName;

    final String eatingFruit(String name){
        System.out.println("eating " + name);
        return fruitName;
    }
}

class Apple extends Fruit{

      // ²»ÄÜÖØдfinal·½·¨,eatingFruit·½·¨Ö»ÊôÓÚFruitÀà,AppleÀàÎÞ·¨µ÷ÓÃ
//    String eatingFruit(String name){
//        super.eatingFruit(name);
//    }

    String eatingApple(String name){
        return super.eatingFruit(name);
    }
}

static: static ÐÞÊεķ½·¨±È½ÏÌØÊâ,²»ÓÃͨ¹ý new ³öij¸öÀàÀ´µ÷ÓÃ,ÓÉÀàÃû.±äÁ¿ÃûÖ±½Óµ÷Óø÷½·¨,Õâ¸ö¾ÍºÜ¹Ø¼üÁË,new ºÜ¹Ø¼ü,Ò²¿ÉÒÔÈÏΪÊÇ¿ªÆô¶à̬µÄµ¼»ðË÷,¶øÓÉÀàÃû.±äÁ¿ÃûÖ±½Óµ÷ÓõĻ°,´ËʱµÄÀàÃûÊÇÈ·¶¨µÄ,²¢²»»á²úÉú¶à̬,ÈçÏ´úÂë:

public class SuperClass {

    public static void sayHello(){
        
        System.out.println("ÓÉ superClass ˵ÄãºÃ");
    }
}

public class SubClass extends SuperClass{

    public static void sayHello(){
        System.out.println("ÓÉ SubClass ˵ÄãºÃ");
    }

    public static void main(String[] args) {
        SuperClass.sayHello();
        SubClass.sayHello();
    }
}

SubClass ¼Ì³Ð SuperClass ºó,ÔÚ

ÊÇÎÞ·¨ÖØд sayHello ·½·¨µÄ,Ò²¾ÍÊÇ˵ sayHello() ·½·¨ÊǶÔ×ÓÀàÒþ²ØµÄ,µ«ÊÇÄã¿ÉÒÔ±àд×Ô¼ºµÄ sayHello() ·½·¨,Ò²¾ÍÊÇ×ÓÀà SubClass µÄsayHello() ·½·¨,Óɴ˿ɼû,·½·¨ÓÉ static ¹Ø¼ü´ÊËùÐÞÊÎ,Ò²ÊDZàÒëʱ°ó¶¨

¶¯Ì¬°ó¶¨

ÔÚÔËÐÐʱ¸ù¾Ý¾ßÌå¶ÔÏóµÄÀàÐͽøÐаó¶¨

³ýÁËÓÉ private¡¢final¡¢static ËùÐÞÊεķ½·¨ºÍ¹¹Ôì·½·¨Íâ,JVM ÔÚÔËÐÐÆÚ¼ä¾ö¶¨·½·¨ÓÉÄĸö¶ÔÏóµ÷ÓõĹý³Ì³ÆΪ¶¯Ì¬°ó¶¨

Èç¹û°Ñ±àÒë¡¢ÔËÐп´³ÉÒ»Ìõʱ¼äÏߵĻ°,ÔÚÔËÐÐÇ°±ØÐëÒª½øÐгÌÐòµÄ±àÒë¹ý³Ì,ÄÇôÔÚ±àÒëÆÚ½øÐеİó¶¨ÊÇÇ°ÆÚ°ó¶¨,ÔÚ³ÌÐòÔËÐÐÁË,·¢ÉúµÄ°ó¶¨¾ÍÊǺóÆڰ󶨡£

public class Father {

    void drinkMilk(){
        System.out.println("¸¸Ç×ϲ»¶ºÈÅ£ÄÌ");
    }
}

public class Son extends Father{

    @Override
    void drinkMilk() {
        System.out.println("¶ù×Óϲ»¶ºÈÅ£ÄÌ");
    }

    public static void main(String[] args) {
        Father son = new Son();
        son.drinkMilk();
    }
}

Son Àà¼Ì³Ð Father Àà,²¢ÖØдÁ˸¸ÀàµÄ dringMilk() ·½·¨,ÔÚÊä³ö½á¹ûµÃ³öµÄÊǶù×Óϲ»¶ºÈÅ£ÄÌ¡£ÄÇôÉÏÃæµÄ°ó¶¨·½Ê½ÊÇʲôÄØ?

ÉÏÃæµÄ°ó¶¨·½Ê½³Æ֮Ϊ¶¯Ì¬°ó¶¨,ÒòΪÔÚÄã±àд Father son = new Son() µÄʱºò,±àÒëÆ÷²¢²»ÖªµÀ son ¶ÔÏóÕæÕýÒýÓõÄÊÇË­,ÔÚ³ÌÐòÔËÐÐʱÆÚ²ÅÖªµÀ,Õâ¸ö son ÊÇÒ»¸ö Father ÀàµÄ¶ÔÏó,µ«ÊÇÈ´Ö¸ÏòÁË Son µÄÒýÓÃ,ÕâÖÖ¸ÅÄî³Æ֮Ϊ¶à̬,ÄÇôÎÒÃǾÍÄܹ»ÕûÀí³öÀ´¶à̬µÄÈý¸öÔ­Ôò:

  • ¼Ì³Ð

  • ÖØд

  • ¸¸ÀàÒýÓÃÖ¸Ïò×ÓÀà¶ÔÏó

Ò²¾ÍÊÇ˵,ÔÚ Father son = new Son() ,´¥·¢Á˶¯Ì¬°ó¶¨»úÖÆ¡£

¶¯Ì¬°ó¶¨µÄ¹ý³Ì

  1. ÐéÄâ»úÌáÈ¡¶ÔÏóµÄʵ¼ÊÀàÐ͵ķ½·¨±í;
  2. ÐéÄâ»úËÑË÷·½·¨Ç©Ãû;
  3. µ÷Ó÷½·¨¡£

¶¯Ì¬°ó¶¨ºÍ¾²Ì¬°ó¶¨µÄÌصã

¾²Ì¬°ó¶¨

¾²Ì¬°ó¶¨ÔÚ±àÒëʱÆÚ´¥·¢,ÄÇôËüµÄÖ÷ÒªÌصãÊÇ

1¡¢±àÒëÆÚ´¥·¢,Äܹ»ÌáÔçÖªµÀ´úÂë´íÎó

2¡¢Ìá¸ß³ÌÐòÔËÐÐЧÂÊ

¶¯Ì¬°ó¶¨

1¡¢Ê¹Óö¯Ì¬°ó¶¨µÄÇ°ÌáÌõ¼þÄܹ»Ìá¸ß´úÂëµÄ¿ÉÓÃÐÔ,ʹ´úÂë¸ü¼ÓÁé»î¡£

2¡¢¶à̬ÊÇÉè¼ÆģʽµÄ»ù´¡,Äܹ»½µµÍñîºÏÐÔ¡£

Java ÖÐÓÐÄÄЩÓï·¨ÌÇ

Óï·¨ÌÇÖ¸µÄÊǼÆËã»úÓïÑÔÖÐÌí¼ÓµÄijÖÖÓï·¨,ÕâÖÖÓï·¨¶ÔÓïÑԵŦÄܲ¢Ã»ÓÐÓ°Ïì,µ«ÊǸü·½±ã³ÌÐòԱʹÓá£ÒòΪ Java ´úÂëÐèÒªÔËÐÐÔÚ JVM ÖÐ,JVM ÊDz¢²»Ö§³ÖÓï·¨ÌǵÄ,Óï·¨ÌÇÔÚ³ÌÐò±àÒë½×¶Î¾Í»á±»»¹Ô­³É¼òµ¥µÄ»ù´¡Óï·¨½á¹¹,Õâ¸ö¹ý³Ì¾ÍÊǽâÓï·¨ÌÇ¡£

ÏÂÃæÎÒ¾ÍÁгöÀ´ Java ÖÐÓÐÄÄЩÓï·¨ÌÇ

  • ·ºÐÍ:·ºÐÍÊÇÒ»ÖÖÓï·¨ÌÇ¡£ÔÚ JDK1.5 ÖÐ,ÒýÈëÁË·ºÐÍ»úÖÆ,µ«ÊÇ·ºÐÍ»úÖƵı¾ÉíÊÇͨ¹ýÀàÐͲÁ³ý À´ÊµÏÖµÄ,ÔÚ JVM ÖÐûÓзºÐÍ,Ö»ÓÐÆÕͨÀàÐͺÍÆÕͨ·½·¨,·ºÐÍÀàµÄÀàÐͲÎÊý,ÔÚ±àÒëʱ¶¼»á±»²Á³ý¡£

  • ×Ô¶¯²ðÏäºÍ×Ô¶¯×°Ïä:×Ô¶¯²ðÏäºÍ×Ô¶¯×°ÏäÊÇÒ»ÖÖÓï·¨ÌÇ,Ëü˵µÄÊÇ°ËÖÖ»ù±¾Êý¾ÝÀàÐ͵İü×°ÀàºÍÆä»ù±¾Êý¾ÝÀàÐÍÖ®¼äµÄ×Ô¶¯×ª»»¡£¼òµ¥µÄ˵,×°Ïä¾ÍÊÇ×Ô¶¯½«»ù±¾Êý¾ÝÀàÐÍת»»Îª°ü×°Æ÷ÀàÐÍ;²ðÏä¾ÍÊÇ×Ô¶¯½«°ü×°Æ÷ÀàÐÍת»»Îª»ù±¾Êý¾ÝÀàÐÍ¡£

  • ÄÚ²¿Àà:ÄÚ²¿ÀàÆäʵҲÊÇÒ»¸öÓï·¨ÌÇ,ÒòΪÆäÖ»ÊÇÒ»¸ö±àÒëʱµÄ¸ÅÄî,Ò»µ©±àÒëÍê³É,±àÒëÆ÷¾Í»áΪÄÚ²¿ÀàÉú³ÉÒ»¸öµ¥¶ÀµÄclass Îļþ,ÃûΪ outer$innter.class¡£

  • ±ä³¤²ÎÊý:±ä³¤²ÎÊýÒ²ÊÇÒ»¸ö±È½ÏСÖÚµÄÓ÷¨,Ëùν±ä³¤²ÎÊý,¾ÍÊÇ·½·¨¿ÉÒÔ½ÓÊܳ¤¶È²»¶¨È·¶¨µÄ²ÎÊý¡£Ò»°ãÎÒÃÇ¿ª·¢²»»áʹÓõ½±ä³¤²ÎÊý,¶øÇұ䳤²ÎÊýÒ²²»ÍƼöʹÓÃ,Ëü»áʹÎÒÃǵijÌÐò±äµÄÄÑÒÔ´¦Àí¡£

  • ÔöÇ¿ for Ñ­»·:ÔöÇ¿ for Ñ­»·ÓëÆÕͨ for Ñ­»·Ïà±È,¹¦ÄܸüÇ¿²¢ÇÒ´úÂë¸ü¼Ó¼ò½à,ÄãÎÞÐèÖªµÀ±éÀúµÄ´ÎÊýºÍÊý×éµÄË÷Òý¼´¿É½øÐбéÀú;ÔöÇ¿ for Ñ­»·µÄ¶ÔÏóҪôÊÇÒ»¸öÊý×é,ҪôʵÏÖÁË Iterable ½Ó¿Ú¡£Õâ¸öÓï·¨ÌÇÖ÷ÒªÓÃÀ´¶ÔÊý×é»òÕß¼¯ºÏ½øÐбéÀú,ÆäÔÚÑ­»·¹ý³ÌÖв»Äܸı伯ºÏµÄ´óС¡£

  • Switch Ö§³Ö×Ö·û´®ºÍö¾Ù:switch ¹Ø¼ü×ÖÔ­ÉúÖ»ÄÜÖ§³ÖÕûÊýÀàÐÍ¡£Èç¹û switch ºóÃæÊÇ String ÀàÐ͵Ļ°,±àÒëÆ÷»á½«Æäת»»³É String µÄhashCode µÄÖµ,ËùÒÔÆäʵ switch Óï·¨±È½ÏµÄÊÇ String µÄ hashCode ¡£

  • Ìõ¼þ±àÒë:Ò»°ãÇé¿öÏÂ,Ô´³ÌÐòÖÐËùÓеÄÐж¼²Î¼Ó±àÒë¡£µ«ÓÐʱϣÍû¶ÔÆäÖÐÒ»²¿·ÖÄÚÈÝÖ»ÔÚÂú×ãÒ»¶¨Ìõ¼þϲŽøÐбàÒë,¼´¶ÔÒ»²¿·ÖÄÚÈÝÖ¸¶¨±àÒëÌõ¼þ,Õâ¾ÍÊÇ Ìõ¼þ±àÒë(conditional compile)¡£

  • ¶ÏÑÔ:Ò²¾ÍÊÇËùνµÄ assert ¹Ø¼ü×Ö,ÊÇ jdk 1.4 ºó¼ÓÈëµÄй¦ÄÜ¡£ËüÖ÷ҪʹÓÃÔÚ´úÂ뿪·¢ºÍ²âÊÔʱÆÚ,ÓÃÓÚ¶ÔijЩ¹Ø¼üÊý¾ÝµÄÅжÏ,Èç¹ûÕâ¸ö¹Ø¼üÊý¾Ý²»ÊÇÄã³ÌÐòËùÔ¤ÆÚµÄÊý¾Ý,³ÌÐò¾ÍÌá³ö¾¯¸æ»òÍ˳ö¡£

  • try-with-resources :JDK 1.7 ¿ªÊ¼,javaÒýÈëÁË try-with-resources ÉùÃ÷,½« try-catch-finally ¼ò»¯Îª try-catch,ÕâÆäʵÊÇÒ»ÖÖÓï·¨ÌÇ,ÔÚ±àÒëʱ»á½øÐÐת»¯Îª try-catch-finally Óï¾ä¡£ÐµÄÉùÃ÷°üº¬Èý²¿·Ö:try-with-resources ÉùÃ÷¡¢try ¿é¡¢catch ¿é¡£ËüÒªÇóÔÚ try-with-resources ÉùÃ÷Öж¨ÒåµÄ±äÁ¿ÊµÏÖÁË AutoCloseable ½Ó¿Ú,ÕâÑùÔÚϵͳ¿ÉÒÔ×Ô¶¯µ÷ÓÃËüÃÇµÄ close ·½·¨,´Ó¶øÌæ´úÁË finally ÖйرÕ×ÊÔ´µÄ¹¦ÄÜ¡£

  • ×Ö·û´®Ïà¼Ó:Õâ¸öÏë±Ø´ó¼ÒÓ¦¸Ã¶¼ÖªµÀ,×Ö·û´®µÄÆ´½ÓÓÐÁ½ÖÖ,Èç¹ûÄܹ»ÔÚ±àÒëʱÆÚÈ·¶¨Æ´½ÓµÄ½á¹û,ÄÇôʹÓà + ºÅÁ¬½ÓµÄ×Ö·û´®»á±»±àÒëÆ÷Ö±½ÓÓÅ»¯ÎªÏà¼ÓµÄ½á¹û,Èç¹û±àÒëÆÚ²»ÄÜÈ·¶¨Æ´½ÓµÄ½á¹û,µ×²ã»áÖ±½ÓʹÓà StringBuilder µÄ append ½øÐÐÆ´½Ó

ÉîÈëÀí½â Java Óï·¨ÌÇ,¿ÉÒԲο¼ÕâƪÎÄÕ Java ÖеÄÓï·¨ÌÇ,ÕæÌð¡£

List ºÍ Set µÄÒìͬ

ÕâÒ²ÊÇÒ»µÀÀÏÉú³£Ì¸µÄÎÊÌâÁË¡£

Ïàͬµã

Java ¼¯ºÏÖÐ×ܹ²ÓÐÈýÖÖÀàÐÍ,·Ö±ðÊÇ List¡¢Set ºÍ Map,ËüÃǶ¼Î»ÓÚ java.util °üÏÂ,¶øÇÒ¶¼ÊǽӿÚ,ËüÃÇÓи÷×ÔµÄʵÏÖÀà¡£

List µÄʵÏÖÀàÓÐArrayList¡¢LinkedList¡¢Vector¡¢CopyOnWriteArrayList µÈ

Set µÄʵÏÖÀàÓÐHashSet¡¢TreeSet¡¢LinkedHashSet¡¢SortedSet µÈ

ËüÃÇͬÑùÓÐ×Ô¼ºµÄ³éÏóÀà,List µÄ³éÏóÀàÊÇ AbstractList¡¢Set µÄ³éÏóÀàÊÇ AbstractSet¡£³éÏóÀàÖ÷ÒªÓÃ×÷¶¥¼¶½Ó¿ÚÒ²¾ÍÊÇ List¡¢Set ÕâÀà½Ó¿ÚµÄÍØÕ¹,ʵÏÖÁËһЩ¶¥¼¶½Ó¿Ú¹¦ÄܵÄͬʱҲ¶¨ÒåÁËһЩģ°æ·½·¨,ÕâÓõ½ÁËÄ£°æÉè¼Æģʽ¡£

List ºÍ Set ¶¼¼Ì³ÐÁË Collection ½Ó¿Ú,¶¼ÊôÓÚÒ»ÖÖ ¼¯ºÏ¡£

ÏÂÃæÀ´ÁÄÒ»ÁÄ List ºÍ Set µÄ²»Í¬µã

²»Í¬µã

ÓÐÐòÐÔ

List ±íʾµÄÊÇÒ»ÖÖ ÓÐÐò¼¯ºÏ,Ò²¾ÍÊÇ˵,List ÖеÄÔªËض¼ÊÇÓÐÐòÅÅÁеÄ,List ½Ó¿ÚÄܹ»×¼È·µÄ¿ØÖÆÿ¸öÔªËصIJåÈë˳Ðò,¿ÉÒÔͨ¹ýË÷ÒýÀ´²éÕÒÔªËØ¡£

Set ¶Ô¼¯ºÏµÄ˳ÐòûÓÐÒªÇó,²»Í¬µÄʵÏÖÀà¿ÉÒÔ¶¨Òå¸÷×ÔµÄ˳Ðò,±ÈÈç HashSet ¾ÍÊÇÒ»ÖÖÎÞÐòµÄÊý¾Ý½á¹¹,HashSet ÖеÄÔªËØÊÇÂÒÐòµÄ;TreeSet Ôò»á°´ÕÕÔªËصÄ×ÔȻ˳Ðò½øÐÐÅÅÐò;LinkedHashSet »á°´ÕÕ²åÈë Set ÖеÄÔªËØ˳Ðò½øÐÐÅÅÐò;SortedSet »á¸ù¾Ý Comparable »òÕß Comparator µÄ±È½Ï˳Ðò½øÐÐÅÅÐò,Ò²¾ÍÊÇ˵Äã¿ÉÒÔ×Ô¶¨ÒåÅÅÐò¹æÔò¡£

ÔªËØÊÇ·ñÖظ´

List ÔÊÐíÖظ´ÔªËØ´æÔÚµÄ,²¢ÇÒ List Äܹ»ÔÊÐí²åÈë null ÔªËØ,¶ø Set ÊDz»ÔÊÐíÖظ´ÔªËصÄ,ËùÒÔ Set Ò²Ö»ÄÜÔÊÐíÒ»¸ö null ÔªËØ´æÔÚ¡£

˵һÏÂÄãÁ˽âµÄ Map

Map ͬÑùÒ²ÊÇÎÒÃÇÈÕ³£¿ª·¢ÖÐʹÓÃƵÂʷdz£¸ßµÄ¼¯ºÏÀà¡£

Map ÊÇÒ»¸öÖ§³Ö key-value Ò²¾ÍÊÇ ¼üÖµ¶Ô ´æ´¢µÄ¶ÔÏó¡£ÆäÖÐ,¼ü¶ÔÏó²»ÔÊÐíÖظ´,¶øÖµ¶ÔÏó¿ÉÒÔÖظ´,²¢ÇÒÖµ¶ÔÏ󻹿ÉÒÔÊÇ Map ÀàÐ͵Ä,¾ÍÏñÊý×éÖеÄÔªËØ»¹¿ÉÒÔÊÇÊý×éÒ»Ñù¡£

Map ½Ó¿ÚµÄʵÏÖÀàÓÐ:HashMap¡¢TreeMap¡¢LinkedHashMap Àà¡£

HashMap ÊÇÎÒÃÇ×î³£ÓÃµÄ Map ʵÏÖÁË,HashMap µÄµ×²ã¹¹Ôì¾ÍÊÇ Êý×é + Á´±í,Ëü»á¸ù¾Ý key µÄ hashCode Öµ´æ´¢Êý¾Ý,¿ÉÒÔʹÓà get(key) À´»ñÈ¡¼ü¶ÔÓ¦µÄÖµ,HashMap ²»ÊÇḬ̈߳²È«µÄÈÝÆ÷,²¢ÇÒÖ»ÄÜÔÊÐíÒ»Ìõ null ¼üÖµ¶Ô¡£ÔÚ HashMap ÖÐÔªËرȽÏÉÙµÄʱºò,HashMap ÊÇÒÔÁ´±íµÄÐÎʽ´æ´¢ÔªËصÄ,µÈµ½Êý¾ÝÁ¿µ½´ïÒ»¶¨³Ì¶Èºó,Á´±í»áתΪºìºÚÊ÷½øÐд洢¡£

TreeMap ÊÇÒ»¸öºìºÚÊ÷µÄ Map,Ëü»á¶Ô¼ü°´ÕÕÖ¸¶¨µÄ˳Ðò½øÐÐÅÅÐò,TreeMap ²»ÊÇÒ»¸öḬ̈߳²È«µÄ Map,TreeMap Öв»ÄÜÔÊÐí null Öµ,·ñÔò»áÅ׳ö¿ÕÖ¸ÕëÒì³£¡£

LinkedHashMap ±£Ö¤ÁËÔªËصIJåÈë˳Ðò,ÔÚ²éѯ±éÀúʱ»á±È HashMap Âý,ͬÑùÒ²²»ÊÇḬ̈߳²È«µÄÈÝÆ÷¡£LinkedHashMap ¿ÉÒÔÔÊÐí¿ÕÔªËØ¡£

ÖµµÃ×¢ÒâµÄÊÇ,Map µÄʵÏÖ»¹ÓÐ Hashtable ºÍ ConcurrentHashMap,ÕâÁ½¸öÔªËض¼ÊÇḬ̈߳²È«µÄ Map¡£

Hashtable ÎÒÃÇÒ»°ã²»³£ÓÃ,ÒòΪËüµÄḬ̈߳²È«¶¼Ö»ÊÇʹÓÃÁ˼òµ¥±©Á¦µÄ synchronized ͬ²½Ëø,ͬ²½ËøµÄ¿ªÏú±È½Ï´ó,²»ÍƼöʹÓá£

»¹ÓÐ×îºóÒ»¸ö¾ÍÊÇ ConcurrentHashMap ÁË,ConcurrentHashMap ÊÇÒ»¸ö»ùÓÚ¶àÏ̸߲߳¢·¢µÄ Map,Ëü¾­³£ÓÃÓÚ¶àÏ̳߳¡¾°,ConcurrentHashMap µÄµ×²ãʹÓÃÁË·Ö¶ÎËø,·Ö¶ÎËø¶Ôÿ¸ö¶Î½øÐмÓËø,ÔÚ±£Ö¤Ḭ̈߳²È«µÄͬʱ½µµÍÁËËøµÄÁ£¶È¡£

ArrayList ¡¢LinkedList ºÍ Vector µÄÇø±ð

ArrayList ÊÇʵÏÖÁË»ùÓÚ¶¯Ì¬Êý×éµÄÊý¾Ý½á¹¹,LinkedList »ùÓÚÁ´±íµÄÊý¾Ý½á¹¹¡£

¶ÔÓÚËæ»ú·ÃÎÊ get ºÍ set ²Ù×÷,ArrayList ÒªÓÅÓÚ LinkedList,ÒòΪ LinkedList ÒªÒƶ¯Ö¸Õë¡£

¶ÔÓÚÐÂÔöºÍɾ³ý²Ù×÷ add ºÍ remove,LinedList ±È½ÏÕ¼ÓÅÊÆ,ÒòΪ ArrayList ÒªÒƶ¯Êý¾Ý¡£

ArrayList ºÍ LinkedList ¶¼²»ÊÇḬ̈߳²È«µÄÈÝÒ×,ËüÃǶ¼ÐèÒªÊÖ¶¯¼ÓËø,»òÕßʹÓà Collections ÖеÄḬ̈߳²È«µÄʵÏÖ Collections.synchronizedList À´¹¹Ôì¡£ËüÃǶ¼¾ßÓÐ fail-fast ¿ìËÙʧ°Ü»úÖƵġ£

Õâ¸öʱºò¿ÉÄÜ»¹»áÎÊÄãºÍ VectorµÄÇø±ð

Ö÷ÒªÓÐÁ½µãÇø±ð:Ḭ̈߳²È«ÐÔºÍÀ©ÈÝ·½Ãæ

Vector Óë ArrayListÒ»Ñù,Ò²ÊÇͨ¹ýÊý×éʵÏÖµÄ,²»Í¬µÄÊÇËüÖ§³ÖÏ̵߳Äͬ²½,¼´Ä³Ò»Ê±¿ÌÖ»ÓÐÒ»¸öÏß³ÌÄܹ»Ð´Vector,±ÜÃâ¶àÏß³Ìͬʱд¶øÒýÆðµÄ²»Ò»ÖÂÐÔ,µ«ÊµÏÖͬ²½ÐèÒªºÜ¸ßµÄ»¨·Ñ,Òò´Ë,·ÃÎÊËü±È·ÃÎÊ ArrayList Âý¡£

µ± Vector »ò ArrayList ÖеÄÔªËس¬¹ýËüµÄ³õʼ´óСʱ,Vector »á½«ËüµÄÈÝÁ¿·­±¶,¶ø ArrayList Ö»Ôö¼Ó 50% µÄ´óС¡£ÕâÑù,ArrayList ¾ÍÓÐÀûÓÚ½ÚÔ¼ÄÚ´æ¿Õ¼ä¡£

Collections.sort ºÍ Arrays.sort µÄʵÏÖÔ­Àí

ÏȳÊÏÖһϠCollections.sort ºÍ Arrays.sort µÄÔ´Âë

´ÓÕâÈý¶Î´úÂë¿ÉÖª,Collections.sort ×îÖÕµ÷ÓõÄÊÇ Arrays.sort Öеķ½·¨,ÄÇô Collections.sort ²»Óÿ´ÁË,Ö±½Ó¿´ Arrays.sort ¼´¿É¡£

Arrays.sort Ô´ÂëÖÐÓÐÈý¸ö·ÖÖ§ÅжÏ,Èç¹ûûÓÐÌṩÍⲿ Comparator ±È½ÏÆ÷µÄ»°,»áÖ±½Óµ÷Óà sort ·½·¨,µ÷ÓúóµÄ sort ·½·¨ÈçÏÂ

Ê×ÏÈ»á½øÐÐLegacyMergeSort.userRequested µÄÅжÏ,ÄÇôÕâ¸öÅжÏÊÇʲôÒâ˼ÄØ?

ÊÇÕâÑù,ÔÚ JDK1.6 ÖÐʹÓõÄÊÇ LegacyMergeSort,ÔÚ JDK1.7 ÖÐʹÓõÄÊÇ TimeSort,Èç¹ûÏëҪʹÓÃÔ­À´µÄ LegacyMergeSort µÄ»°,¾ÍÐèÒªÔÚϵͳ±äÁ¿ÖмÓÉÏ

-Djava.util.Arrays.useLegacyMergeSort=true

Õâ¸öÅäÖá£

Èç¹ûûÓÐʹÓÃÕâ¸öÅäÖõĻ°,ĬÈϵ÷ÓõÄÊÇ ComparableTimSort.sort ·½·¨,ÕâÆäʵÊÇÒ»ÖÖ TimSort µÄÓÅ»¯,¶ø TimSort µÄÅÅÐòËã·¨¾ÍÊǹ鲢ÅÅÐò¡£

ÎÒÃÇ´Ó Arrays.sort Öеĵڶþ¸öÅжÏÒ²¿ÉÒÔ¿´µ½ÕâÒ»µã,ComparableTimSort ºÍ TimSort ×î´óµÄÇø±ð¾ÍÊÇ¿´ÄãÓÐûÓÐÌṩÍⲿµÄ±È½ÏÆ÷ÁË¡£

Iterator ºÍ ListIterator ÓÐʲôÇø±ð

ÎÒÃÇÈÕ³£¿ª·¢¹ý³ÌÖÐʹÓà Iterator Óõķdz£¶à,ListIterator ºÜÉÙ½Ó´¥,ÕâµÀÌâÖ÷Òª¿¼²ìÄã¶Ô List Ô´ÂëµÄÊìϤ³Ì¶ÈÒÔ¼°¶Ô fail-fast »úÖÆÊÇ·ñÁ˽⡣

Ò»°ãÀ´½²,Iterator ºÍ ListIterator µÄÖ÷ÒªÇø±ðÓÐ

  • Iterator ÔÚ±éÀú¹ý³ÌÖÐ,²»ÄÜÐ޸ļ¯ºÏÖÐÔªËصÄÊýÁ¿²Ù×÷,·ñÔò»áÅ׳öÒì³£¡£

  • ʹÓ÷¶Î§²»Í¬,Iterator ¿ÉÒÔÔÚËùÓм¯ºÏÖÐʹÓÃ,¶ø ListIterator Ö»ÄÜÓÃÔÚ List ÀàÐÍÓë×ÓÀàÐÍ

  • listIterator ÓÐ add ·½·¨,¿ÉÒÔÏò¼¯ºÏÖÐÌí¼ÓÔªËØ,¶ø iterator ²»ÄÜ¡£

  • listiterator ºÍ iterator ¶¼ÓÐ hasnext ºÍ next ·½·¨¿ÉÒÔ˳Ðò±éÀúÔªËØ, µ«ÊÇ listiterator ÓÐ hasprevious ºÍ previous ·½·¨,¿ÉÒÔÄæÏò±éÀúÔªËØ

  • listiterator ¿ÉÒÔ¶¨Î»µ±Ç°µÄË÷ÒýλÖà nextIndex ºÍ previousIndex ¿ÉÒÔʵÏÖ,iterator ûÓд˹¦ÄÜ

  • listiterator ¿ÉÒÔʵÏÖ¶Ô¶ÔÏóµÄÐÞ¸Ä set() ·½·¨¿ÉÒÔʵÏÖ,iterator ½ö¿ÉÒÔ±éÀú,²»ÄÜÐ޸ġ£

˵һ˵ ArrayList µÄÀ©ÈÝ»úÖÆ

½ñÌìÃæÊÔ¹ÙÓÖÎʵ½Äã ArrayList µÄÀ©ÈÝ»úÖÆÁË¡£¡£¡£¡£¡£¡£ÄǾÍÖ±½Ó¿´Ô´ÂëßÂ

»°ËµÊ²Ã´Ê±ºò»áÀ©ÈÝ°¡,¿Ï¶¨Êǵ÷Óà add ·½·¨Ìí¼ÓÔªËصÄʱºòѽ

ArrayList Ìí¼ÓÔªËØ»á½øÐÐÅжÏ,ÕâÒ²ÊÇensureCapacityInternal ·½·¨¸ÉµÄÊÂÇé,Ò²¾ÍÊÇÅжϲ¢È·¶¨ÈÝÁ¿´óСµÄÒ»¸ö·½·¨,ÎÒÃÇÖ±½Ó¸ú½øÈ¥

Õâ¸ö·½·¨»á½øÐÐÒ»¸öÅжÏ,ÎÒÃÇÉÏÃæ×¢ÊÍÒ²¸ø³öÀ´ÁË,¾ÍÊÇ˵ÄãÕâ¸ö ArrayList ÔÚ¹¹ÔìµÄʱºòÊÇ·ñÖ¸¶¨Á˳õʼÈÝÁ¿,Èç¹û List ÖÐûÓÐÔªËØ,¾Í»áÈ¡ÄãÉèÖóõʼÈÝÁ¿ºÍ ArrayList ÖÐ×î´óÈÝÁ¿ÅжÏ,È¡´óµÄΪ׼¡£

È»ºóµ÷Óà ensureExplicitCapacity ·½·¨,ÅжÏÊÇ·ñÐèÒªÀ©ÈÝ

¿ÉÒÔ¿´µ½,Èç¹û´Ëʱ ArrayList Êý×éÔªËØµÄ size Òª±È´æ´¢µÄÔªËØ´óµÄ»°,¾Í»áµ÷Óà grow ·½·¨,Õâ¸ö grow ·½·¨Æäʵ¾ÍÊÇÀ©ÈÝ·½·¨¡£

Õâ¶Î´úÂë¾ÍÊÇ ArrayList À©ÈÝ»úÖÆÁË¡£ÎÒÃÇÀ´·ÖÎöÒ»ÏÂ

Ê×ÏÈ»á»ñÈ¡ ArrayList ÔªËصÄÊýÁ¿,È»ºó°Ñ ArrayList µÄÈÝÁ¿À©ÈÝ 50%,°ÑÀ©ÈݺóµÄÈÝÁ¿ºÍ²ÎÊýÈÝÁ¿½øÐбȽÏ,Èç¹û±È²ÎÊýСµÄ»°,È¡Öµ¸ü´óµÄÈÝÁ¿½øÐÐÔªËØ¿½±´¡£Èç¹ûÀ©ÈݺóµÄÈÝÁ¿±È ArrayList µÄ×î´óÈÝÁ¿»¹Òª´ó,¾Í»á½øÐÐ×î´óÈÝÁ¿µÄÈ¡Öµ

hugeCapacity ·½·¨Ê×ÏÈÅжϲÎÊýÊÇ·ñСÓÚ 0 ,Èç¹ûÊǵĻ°ÄÇô¾Í»áÅ׳ö OutOfMemoryError Òì³£,Èç¹û²»ÊǵĻ°¾ÍÅжϲÎÊýºÍ ArrayList ×î´óÈÝÁ¿µ½µ×Ë­´ó,Èç¹û²ÎÊý´óµÄ»°,¾Í»áȡֵΪ Integer.MAX_VALUE,Èç¹ûСµÄ»°¾Í»áÈ¡ MAX_ARRAY_SIZE¡£

BIO¡¢NIO¡¢AIO µÄÇø±ð

¼òµ¥À´Ëµ,BIO(Blocking I/O),ËüÊÇÒ»ÖÖͬ²½×èÈûʽµÄ IO,Êý¾ÝµÄ¶Áд±ØÐëÔÚÒ»¸öÏß³ÌÖнøÐÐÍê³É,Ò²¾ÍÊÇ˵ËüÖ»ÓÐÒ»¸öÖ´ÐÐ˳ÐòÁ÷,Èç¹ûÓöµ½ IO Á÷µÄ¶ÁÈ¡²Ù×÷,Ëü±ØÐëµÈµ½ IO Á÷µÄ¶ÁÈ¡»òÕßдÈëÍê³Éºó,²ÅÄܽøÐнÓÏÂÀ´µÄ¹¤×÷¡£

NIO(non-blocking IO) ÆäʵҲ±»³ÆΪ new io,ËüÊÇ JDK 1.4 ¼°ÆäÒÔÉÏ°æ±¾ÖÐÐÂÔö¼ÓµÄÒ»ÖÖ IO Á÷,ËüÊÇÒ»ÖÖͬ²½·Ç×èÈûµÄ IO Ä£ÐÍ¡£ÔÚ NIO ÖÐ,Ï̷߳¢ÆðÇëÇóºó»áÁ¢¿Ì·µ»Ø,ͬ²½Ö¸µÄÊDZØÐëµÈ´ý IO »º³åÇøÄÚµÄÊý¾Ý¾ÍÐ÷,¶ø·Ç×èÈûÖ¸µÄÊÇ,Óû§Ï̲߳»Ô­µØµÈ´ý IO »º³åÇø,¿ÉÒÔÏÈ×öһЩÆäËû²Ù×÷,µ«ÊÇÒª¶¨Ê±ÂÖѯ¼ì²é IO »º³åÇøÊý¾ÝÊÇ·ñ¾ÍÐ÷¡£Java ÖÐ µÄ NIO ÊÇ new IO µÄÒâ˼¡£ÆäʵÊÇ NIO ¼ÓÉÏ IO ¶à·¸´Óü¼Êõ¡£ÆÕͨµÄ NIO ÊÇÏß³ÌÂÖѯ²é¿´Ò»¸ö IO »º³åÇøÊÇ·ñ¾ÍÐ÷,¶ø Java ÖÐµÄ new IO Ö¸µÄÊÇÏß³ÌÂÖѯµØÈ¥²é¿´Ò»¶Ñ IO »º³åÇøÖÐÄÄЩ¾ÍÐ÷,ÕâÊÇÒ»ÖÖ IO ¶à·¸´ÓõÄ˼Ïë¡£IO ¶à·¸´ÓÃÄ£ÐÍÖÐ,½«¼ì²é IO Êý¾ÝÊÇ·ñ¾ÍÐ÷µÄÈÎÎñ,½»¸øϵͳ¼¶±ðµÄ select »ò epoll Ä£ÐÍ,ÓÉϵͳ½øÐмà¿Ø,¼õÇáÓû§Ï̸߳ºµ£¡£

AIO ÊÇÕæÕýÒâÒåÉϵÄÒì²½·Ç×èÈû IO Ä£ÐÍ¡£ ÉÏÊö NIO ʵÏÖÖÐ,ÐèÒªÓû§Ï̶߳¨Ê±ÂÖѯ,È¥¼ì²é IO »º³åÇøÊý¾ÝÊÇ·ñ¾ÍÐ÷,Õ¼ÓÃÓ¦ÓóÌÐòÏß³Ì×ÊÔ´,ÆäʵÂÖѯÏ൱ÓÚ»¹ÊÇ×èÈûµÄ,²¢·ÇÕæÕý½â·Åµ±Ç°Ïß³Ì,ÒòΪËü»¹ÊÇÐèҪȥ²éѯÄÄЩ IO ¾ÍÐ÷¡£¶øÕæÕýµÄÀíÏëµÄÒì²½·Ç×èÈû IO Ó¦¸ÃÈÃÄÚºËϵͳÍê³É,Óû§Ïß³ÌÖ»ÐèÒª¸æËßÄÚºË,µ±»º³åÇø¾ÍÐ÷ºó,֪ͨÎÒ»òÕßÖ´ÐÐÎÒ½»¸øÄãµÄ»Øµ÷º¯Êý¡£

É±´ºÍdz¿½±´Çø±ð

ÔÚ Java ÖÐ,¸ù¾Ý¶Ô¶ÔÏóÊôÐԵĿ½±´³Ì¶È(»ù±¾Êý¾ÝÀàºÍÒýÓÃÀàÐÍ),»á·ÖΪÁ½ÖÖ:

  • dz¿½±´ Shallow Copy
  • É±´ Deep Copy

dz¿½±´:dz¿½±´»áÖØд´½¨Ò»¸ö¶ÔÏó,Õâ¸ö¶ÔÏóÓÐ×Åԭʼ¶ÔÏóÊôÐÔÖµµÄÒ»·Ý¿½±´¡£Èç¹ûÊôÐÔÊÇ»ù±¾ÀàÐÍ,¿½±´µÄ¾ÍÊÇ»ù±¾ÀàÐ͵ÄÖµ;Èç¹ûÊôÐÔÊÇÄÚ´æµØÖ·(ÒýÓÃÀàÐÍ),¿½±´µÄ¾ÍÊÇÄÚ´æµØÖ· ,Òò´ËÈç¹ûÆäÖÐÒ»¸ö¶ÔÏó¸Ä±äÁËÕâ¸öµØÖ·,¾Í»áÓ°Ïìµ½ÁíÒ»¸ö¶ÔÏó¡£¼´Ä¬ÈÏ¿½±´¹¹Ô캯ÊýÖ»ÊǶԶÔÏó½øÐÐdz¿½±´¸´ÖÆ,¼´Öð¸ö³ÉÔ±ÒÀ´Î¿½±´,Ò²¾ÍÊÇÖ»¸´ÖƶÔÏó¿Õ¼ä¶ø²»¸´ÖÆ×ÊÔ´¡£

ʵÏÖdz¿½±´,ÐèҪʵÏÖ Cloneable ½Ó¿Ú,²¢¸²Ð´ clone() ·½·¨¡£

É±´:¶ÔÓÚ»ù±¾Êý¾ÝÀàÐ͵ijÉÔ±¶ÔÏó,ÒòΪ»ù´¡Êý¾ÝÀàÐÍÊÇÖµ´«µÝµÄ,ËùÒÔÊÇÖ±½Ó½«ÊôÐÔÖµ¸³Öµ¸øеĶÔÏó¡£»ù´¡ÀàÐ͵Ŀ½±´,ÆäÖÐÒ»¸ö¶ÔÏóÐ޸ĸÃÖµ,²»»áÓ°ÏìÁíÍâÒ»¸ö(ºÍdz¿½±´Ò»Ñù)¡£¶ÔÓÚÒýÓÃÀàÐÍ,±ÈÈçÊý×é»òÕßÀà¶ÔÏó,É±´»áн¨Ò»¸ö¶ÔÏó¿Õ¼ä,È»ºó¿½±´ÀïÃæµÄÄÚÈÝ,ËùÒÔËüÃÇÖ¸ÏòÁ˲»Í¬µÄÄÚ´æ¿Õ¼ä¡£¸Ä±äÆäÖÐÒ»¸ö,²»»á¶ÔÁíÍâÒ»¸öÒ²²úÉúÓ°Ïì¡£¶ÔÓÚÓжà²ã¶ÔÏóµÄ,ÿ¸ö¶ÔÏó¶¼ÐèҪʵÏÖ Cloneable ²¢ÖØд clone() ·½·¨,½ø¶øʵÏÖÁ˶ÔÏóµÄ´®Ðвã²ã¿½±´¡£É±´Ïà±ÈÓÚdz¿½±´ËٶȽÏÂý²¢ÇÒ»¨Ïú½Ï´ó¡£

Java ´´½¨¶ÔÏóµÄÎåÖÖ·½Ê½

Java ´´½¨¶ÔÏóµÄ·½Ê½Ö÷ÒªÓÐÎåÖÖ

  1. ʹÓà new À´´´½¨¶ÔÏó
Object obj = new Object();
  1. ʹÓà newInstance ·½·¨À´´´½¨
User user = (User)Class.forName("com.cxuan.test.User").newInstance();

// »òÕßʹÓÃ

User user = User.class.newInstance();
  1. ʹÓ÷´ÉäÀ´´´½¨¶ÔÏó
Constructor<User> constructor = User.class.getConstructor();
User user = constructor.newInstance();
  1. ʹÓöÔÏó¿Ë¡À´´´½¨¶ÔÏó
Constructor<User> constructor = User.class.getConstructor();
User user = constructor.newInstance();
user.setName("cxuan");

User user2 = (User)user.clone();
System.out.println(user2.getName());
  1. ʹÓ÷´ÐòÁл¯´´½¨¶ÔÏó
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("xxx"));
out.writeObject(user2);
out.close();
//Deserialization
ObjectInputStream in = new ObjectInputStream(new FileInputStream("xxx"));
User user3 = (User) in.readObject();
in.close();
user3.setName("cxuan003");
System.out.println(user3 + ", hashcode : " + user3.hashCode());

ÉîÈëÀí½âÕ⼸ÖÖ´´½¨¶ÔÏóµÄ·½Ê½,¿ÉÒԲο¼ Å̵ã Java ´´½¨¶ÔÏóµÄ n ÖÖ²Ù×÷

»¨Ðõ

ÕâƪдÁ˺ܳ¤Ê±¼ä,΢ÐŹ«ÖںŵÄͳ¼ÆÊÇ 3w ×Ö,31 ÕÅͼ,ÔĶÁʱ¼ä´ó¸ÅÊÇ 77 ·ÖÖÓ¡£

ÎÒÖªµÀÕâ¸öÔĶÁʱ¼ä¿ÉÒÔ×øµØÌú 10 ºÅÏßÈƱ±¾©Ò»È¦ÁË,Ò²»áÓкܶàÈ˲úÉú·´¸Ð,ÎÄÕÂдÕâô³¤,Ë­ÓÐʱ¼ä¿´Íê°¡?ÕâÖÖ¿ì²ÍʽµÄÒÉÎÊÎÒÒѾ­Ìýµ½¹ýÎÞÊý±éÁË,µ«ÊÇÎÒÿ´Î¶¼»áµ±×÷¶úÅÔ·ç¡£ÊÇ°¡,ÎÒÃÇÿÌì,Ë¢¶¶Òô¿´ÃÀÅ®,ˢͷÌõ¿´ÃÀÅ®,Ë¢¹«Öںſ´Ò»Èº´óÀÐÃÇÌìÌ촵ţ±Æ,È»ºóÂîµÀ:¡°ÎÔ²Û,ÓÖÌØôÀË·ÑÀÏ×Ó 1 ¸öСʱ¡±,È»ºó¼Ù×°ÈÏÕæµÄ¿´ÁË 15 ·ÖÖÓ´úÂë,¼ÌÐøÀË·Ñ¡£

ÎÒÖªµÀÕâƪÎÄÕÂÈÔ¾Éû¶àÉÙÈË¿´,ÒòΪÂíÉϾÍÒª±»ÐÅÏ¢ºéÁ÷ÑÍûÁË,¿ÉÄÜÄã¿´ÍêÁ˾ͻá·ÅÔÚÊղؼÐÖÐ,ÉõÖÁÄã¾õµÃÎÒдµÄС¶ù¿Æ,Ò²¿ÉÄÜÕâƪÎÄÕÂÔÚÄãµÄ±à³ÌÉúÑÄÖзº²»ÆðÒ»µãÁ°äô,ÎÒ²»Ïë¹ý¶àµÄÃèÊöÒ»ÖÖÏÖÏó¡£ÎÒֻ˵һÏÂÎÒ×öÁËÄÄЩÊÂÇé°É¡£ÕâƪÎÄÕÂÖдó¸ÅÓв»µ½ 20 ÌõÁ´½Ó,ÆäÖÐÓÐ 14 Ìõ¶¼ÊÇÎÒ¹«ÖںŵÄÄÚÈÝ¡£

һƪÓëÖÚ²»Í¬µÄ String¡¢StringBuffer¡¢StringBuilder Ïê½â

Ò»¸öССµÄ static »¹ÄÜÄѵÃסÎÒ?

¿´ÍêÕâƪ HashMap ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË

¿´ÍêÕâƪ Exception ºÍ Error ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË

¶¯Ì¬´úÀíÉîÈëÀí½â

¶¯Ì¬´úÀí¾¹È»Èç´Ë¼òµ¥!

ÉîÈëÀí½â IO

ÎÒÏòÃæÊÔ¹Ù½²½âÁ˵¥Àýģʽ,Ëû¶ÔÎÒÊúÆðÁË´óÄ´Ö¸

Comparable ºÍ ComparatorµÄÀí½â

ѧ»á·´Éäºó,ÎÒ±»Â¼È¡ÁË!(¸É»õ)

ÉîÈëÀí½â¸÷ÖÖÒýÓÃÎÊÌâ

¿´ÍêÕâƪ final¡¢finally ºÍ finalize ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË

Java ÖеÄÓï·¨ÌÇ,ÕæÌð¡£

Å̵ã Java ´´½¨¶ÔÏóµÄ n ÖÖ²Ù×÷

ÎÒÏë,ÕâÄܹ»¶ÔµÄÆðÎÒÔÚ github https://github.com/crisxuan/bestJavaer ÉÏÃæ˵¹ýµÄ»°¡£

ºÃÁË,¾ÍÕâÑù,ÖÁÓÚµãÔÞÔÚ¿´Ê²Ã´µÄ,ËæÒâ¾ÍºÃ,Ï£ÍûÕâƪÎÄÕÂÄܹ»°ïµ½Äã¡£

ÎÒ×Ô¼º¸ÎÁËÁù±¾ PDF,΢ÐÅËÑË÷¡¸³ÌÐòÔ±cxuan¡¹¹Ø×¢¹«Öںźó,ÔÚºǫ́»Ø¸´ cxuan ,ÁìÈ¡È«²¿ PDF,ÕâЩ PDF ÈçÏÂ

Áù±¾ PDF Á´½Ó

£»Ô­ÎÄÁ´½Ó£ºhttps://blog.csdn.net/qq_36894974/article/details/115505102
±¾Õ¾²¿·ÖÄÚÈÝתÔØÓÚÍøÂ磬°æȨ¹éÔ­×÷ÕßËùÓУ¬×ªÔØ֮ĿµÄÔÚÓÚ´«²¥¸ü¶àÓÅÐã¼¼ÊõÄÚÈÝ£¬ÈçÓÐÇÖȨÇëÁªÏµQQ/΢ÐÅ£º153890879ɾ³ý£¬Ð»Ð»£¡
ÉÏһƪ£ºLeetcode-206.·´×ªÁ´±í£¨µü´úÓëµÝ¹éÏê½â£© ÏÂһƪ£ºÃ»ÓÐÁË

ÍƼöͼÎÄ

  • ÖÜÅÅÐÐ
  • ÔÂÅÅÐÐ
  • ×ÜÅÅÐÐ

Ëæ»úÍƼö