See More

-------------------- HashMap | -------------------- # JDK 1.7¼°ÒÔǰʹÓà Hash ±í + Á´±íʵÏÖ # JDK 1.8¼°ÒÔºóʹÓà Hash ±í + ºìºÚÊ÷ʵÏÖ(ÓÅ»¯Á˲éѯЧÂÊ) * µ±´¥·¢ÁËÒ»¶¨µÄÌõ¼þºó,»á°ÑÁ´±íת»»ÎªºìºÚÊ÷ # Hash±íµÄ³ß´çºÍÈÝÁ¿·Ç³£µÄÖØÒª * Ò»°ãÀ´Ëµ,Hash±íÕâ¸öÈÝÆ÷µ±ÓÐÊý¾ÝÒª²åÈëʱ,¶¼»á¼ì²éÈÝÁ¿ÓÐûÓг¬¹ýÉ趨µÄthredhold,Èç¹û³¬¹ý,ÐèÒªÔö´óhash±íµÄ³ß´ç * µ«ÊÇÕâÑùÒ»À´,Õû¸öhash±íÀïµÄÎÞËØ¶¼ÐèÒª±»ÖØËãÒ»±é,Õâ½Ðrehash,Õâ¸ö³É±¾Ï൱µÄ´ó # ºËÐĵijÉÔ±±äÁ¿ static final int TREEIFY_THRESHOLD = 8; * ÓÃÓÚÅжÏÊÇ·ñÐèÒª½«Á´±íת»»ÎªºìºÚÊ÷µÄãÐÖµ * Èç¹ûÁ´±íµÄ³¤¶È´óÓÚÁ˸ÃÖµ,´óÓÚÁ˸ÃÖµ¾Í»áת»»ÎªºìºÚÊ÷ int size; * ´æ´¢µÄÊý¾ÝÊýÁ¿ int modCount; * Ð޸ĵĴÎÊý float loadFactor; * ¸ºÔØÒò×Ó,¾ö¶¨ÁËʲôʱºò»á´¥·¢À©ÈÝ ÈÝÆ÷´óС x ¸ºÔØÒò×Ó = ´¥·¢À©ÈݵĴóС int threshold; * µ÷ÕûMap´óСµÄÏÂÒ»¸öÖµ Node[] table; * ´æ·ÅÊý¾ÝµÄÊý×é Set> entrySet; # HashMap ÔÚ²¢·¢³¡¾°ÏÂʹÓÃʱÈÝÒ׳öÏÖÎÊÌâ * ¶àÏß³Ìput²Ù×÷ºó,get²Ù×÷µ¼ÖÂËÀÑ­»·(¾Ý˵jdk8ÐÞ¸´ÁËÕâ¸öÎÊÌâ) HashMap map = new HashMap(); for (int i = 0; i < 1000; i++) { new Thread(new Runnable() { @Override public void run() { map.put(UUID.randomUUID().toString(), ""); } }).start(); } * HashMap À©ÈݵÄʱºò»áµ÷Óà resize() ·½·¨ * ÕâÀïµÄ²¢·¢²Ù×÷ÈÝÒ×ÔÚÒ»¸öͰÉÏÐγɻ·ÐÎÁ´±í * µ±»ñȡһ¸ö²»´æÔÚµÄ key ʱ,¼ÆËã³öµÄ index ÕýºÃÊÇ»·ÐÎÁ´±íµÄϱê¾Í»á³öÏÖËÀÑ­»· * ¶àÏß³Ìput·ÇnullÔªËØºó,get²Ù×÷µÃµ½nullÖµ(µ¼ÖÂÔªËØ¶ªÊ§,Õâ¸öÎÊÌâjdk8ûÓÐÐÞ¸´)