Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java¼¯ºÏÀà²Ù×÷ÓÅ»¯¾­Ñé×ܽá
 
À´Ô´£ºcsdn ·¢²¼ÓÚ 2017-2-15
  1936  次浏览      29
 

±¾ÎÄÊ×ÏÈÕë¶Ô Java ¼¯ºÏ½Ó¿Ú½øÐÐÁËһЩ½éÉÜ£¬²¢¶ÔÕâЩ½Ó¿ÚµÄʵÏÖÀà½øÐÐÏêϸÃèÊö£¬°üÀ¨ LinkedList¡¢ArrayList¡¢Vector¡¢Stack¡¢Hashtable¡¢HashMap¡¢WeakHashMap µÈ£¬È»ºó¶ÔһЩʵÏÖÀàµÄʵÏÖ·½Ê½ºÍʹÓþ­Ñé½øÐн²½â£¬Í¬Ê±Öصã½éÉÜ WeakHashMap¡£Ï£Íûͨ¹ý±¾ÎĽéÉÜ£¬¿ÉÒÔÈöÁÕß¶Ô¼¯ºÏµÄ²Ù×÷·½Ê½¡¢×¢ÒâÊÂÏîµÈÓÐһЩÁ˽⡣

ÔÚʵ¼ÊµÄÏîÄ¿¿ª·¢ÖлáÓкܶàµÄ¶ÔÏó£¬ÈçºÎ¸ßЧ¡¢·½±ãµØ¹ÜÀí¶ÔÏ󣬳ÉΪӰÏì³ÌÐòÐÔÄÜÓë¿Éά»¤ÐÔµÄÖØÒª»·½Ú¡£Java ÌṩÁ˼¯ºÏ¿ò¼ÜÀ´½â¾ö´ËÀàÎÊÌ⣬ÏßÐÔ±í¡¢Á´±í¡¢¹þÏ£±íµÈÊdz£ÓõÄÊý¾Ý½á¹¹£¬ÔÚ½øÐÐ Java ¿ª·¢Ê±£¬JDK ÒѾ­ÎªÎÒÃÇÌṩÁËһϵÁÐÏàÓ¦µÄÀàÀ´ÊµÏÖ»ù±¾µÄÊý¾Ý½á¹¹£¬ËùÓÐÀà¶¼ÔÚ java.util Õâ¸ö°üÀÇåµ¥ 1 ÃèÊöÁ˼¯ºÏÀàµÄ¹ØÏµ¡£

Çåµ¥ 1.¼¯ºÏÀàÖ®¼ä¹ØÏµ

Collection
©ÀList
©¦©ÀLinkedList
©¦©ÀArrayList
©¦©¸Vector
©¦¡¡©¸Stack
©¸Set
Map
©ÀHashtable
©ÀHashMap
©¸WeakHashMap

±¾ÎĽ²µÄ¾ÍÊǼ¯ºÏ¿ò¼ÜµÄʹÓþ­Ñé×ܽᣬעÒ⣬±¾ÎÄËùÓдúÂë»ùÓÚ JDK7¡£

¼¯ºÏ½Ó¿Ú

Collection ½Ó¿Ú

Collection ÊÇ×î»ù±¾µÄ¼¯ºÏ½Ó¿Ú£¬Ò»¸ö Collection ´ú±íÒ»×é Object£¬¼´ Collection µÄÔªËØ£¨Elements£©¡£Ò»Ð© Collection ÔÊÐíÏàͬµÄÔªËØ¡¢Ö§³Ö¶ÔÔªËØ½øÐÐÅÅÐò£¬ÁíһЩÔò²»ÐС£JDK ²»Ìṩֱ½Ó¼Ì³Ð×Ô Collection µÄÀ࣬JDK ÌṩµÄÀà¶¼ÊǼ̳Ð×Ô Collection µÄ×Ó½Ó¿Ú£¬Èç List ºÍ Set¡£ËùÓÐʵÏÖ Collection ½Ó¿ÚµÄÀà¶¼±ØÐëÌṩÁ½¸ö±ê×¼µÄ¹¹Ô캯Êý£¬ÎÞ²ÎÊýµÄ¹¹Ô캯ÊýÓÃÓÚ´´½¨Ò»¸ö¿ÕµÄ Collection£¬ÓÐÒ»¸ö Collection ²ÎÊýµÄ¹¹Ô캯ÊýÓÃÓÚ´´½¨Ò»¸öÐ嵀 Collection£¬Õâ¸öÐ嵀 Collection Óë´«ÈëµÄ Collection ÓÐÏàͬµÄÔªËØ£¬ºóÒ»¸ö¹¹Ô캯ÊýÔÊÐíÓû§¸´ÖÆÒ»¸ö Collection¡£

ÈçºÎ±éÀú Collection ÖеÄÿһ¸öÔªËØ£¿

²»ÂÛ Collection µÄʵ¼ÊÀàÐÍÈçºÎ£¬Ëü¶¼Ö§³ÖÒ»¸ö iterator() µÄ·½·¨£¬¸Ã·½·¨·µ»ØÒ»¸öµü´ú×Ó£¬Ê¹Óøõü´ú×Ó¼´¿ÉÖðÒ»·ÃÎÊ Collection ÖÐÿһ¸öÔªËØ¡£µäÐ͵ÄÓ÷¨ÈçÏ£º

Iterator it = collection.iterator(); // »ñµÃÒ»¸öµü´ú×Ó
while(it.hasNext()){
Object obj = it.next(); // µÃµ½ÏÂÒ»¸öÔªËØ
}

Collection ½Ó¿ÚÅÉÉúµÄÁ½¸ö½Ó¿ÚÊÇ List ºÍ Set¡£

Collection ½Ó¿ÚÌṩµÄÖ÷Òª·½·¨£º

boolean add(Object o) Ìí¼Ó¶ÔÏóµ½¼¯ºÏ£»

boolean remove(Object o) ɾ³ýÖ¸¶¨µÄ¶ÔÏó£»

int size() ·µ»Øµ±Ç°¼¯ºÏÖÐÔªËØµÄÊýÁ¿£»

boolean contains(Object o) ²éÕÒ¼¯ºÏÖÐÊÇ·ñÓÐÖ¸¶¨µÄ¶ÔÏó£»

boolean isEmpty() Åжϼ¯ºÏÊÇ·ñΪ¿Õ£»

Iterator iterator() ·µ»ØÒ»¸öµü´úÆ÷£»

boolean containsAll(Collection c) ²éÕÒ¼¯ºÏÖÐÊÇ·ñÓм¯ºÏ C ÖеÄÔªËØ£»

boolean addAll(Collection c) ½«¼¯ºÏ C ÖÐËùÓеÄÔªËØÌí¼Ó¸ø¸Ã¼¯ºÏ£»

void clear() ɾ³ý¼¯ºÏÖÐËùÓÐÔªËØ£»

void removeAll(Collection c) ´Ó¼¯ºÏÖÐɾ³ý C ¼¯ºÏÖÐÒ²ÓеÄÔªËØ£»

void retainAll(Collection c) ´Ó¼¯ºÏÖÐɾ³ý¼¯ºÏ C Öв»°üº¬µÄÔªËØ¡£

List ½Ó¿Ú

List ÊÇÓÐÐòµÄ Collection£¬Ê¹Óô˽ӿÚÄܹ»¾«È·µÄ¿ØÖÆÃ¿¸öÔªËØ²åÈëµÄλÖá£Óû§Äܹ»Ê¹ÓÃË÷Òý£¨ÔªËØÔÚ List ÖеÄλÖã¬ÀàËÆÓÚÊý×éϱ꣩À´·ÃÎÊ List ÖеÄÔªËØ£¬ÕâÀàËÆÓÚ Java µÄÊý×é¡£ºÍÏÂÎÄÒªÌáµ½µÄ Set ²»Í¬£¬List ÔÊÐíÓÐÏàͬµÄÔªËØ¡£

³ýÁ˾ßÓÐ Collection ½Ó¿Ú±Ø±¸µÄ iterator() ·½·¨Í⣬List »¹Ìṩһ¸ö listIterator() ·½·¨£¬·µ»ØÒ»¸ö ListIterator ½Ó¿Ú¡£ºÍ±ê×¼µÄ Iterator ½Ó¿ÚÏà±È£¬ListIterator ¶àÁËһЩ add() Ö®ÀàµÄ·½·¨£¬ÔÊÐíÌí¼Ó¡¢É¾³ý¡¢Éè¶¨ÔªËØ¡¢Ïòǰ»òÏòºó±éÀúµÈ¹¦ÄÜ¡£ÊµÏÖ List ½Ó¿ÚµÄ³£ÓÃÀàÓÐ LinkedList£¬ArrayList£¬Vector ºÍ Stack µÈ¡£

List ½Ó¿ÚÌṩµÄÖ÷Òª·½·¨£º

void add(int index,Object element) ÔÚÖ¸¶¨Î»ÖÃÉÏÌí¼ÓÒ»¸ö¶ÔÏó£»

boolean addAll(int index,Collection c) ½«¼¯ºÏ C µÄÔªËØÌí¼Óµ½Ö¸¶¨µÄλÖã»

Object get(int index) ·µ»Ø List ÖÐÖ¸¶¨Î»ÖõÄÔªËØ£»

int indexOf(Object o) ·µ»ØµÚÒ»¸ö³öÏÖÔªËØ O µÄλÖã»

Object removeint(int index) ɾ³ýÖ¸¶¨Î»ÖõÄÔªËØ£»

Object set(int index,Object element) ÓÃÔªËØ element È¡´úλÖà index ÉϵÄÔªËØ, ·µ»Ø±»È¡´úµÄÔªËØ¡£

Map ½Ó¿Ú

Map ûÓм̳РCollection ½Ó¿Ú¡£Map Ìṩ Key µ½ Value µÄÓ³É䣬һ¸ö Map Öв»Äܰüº¬ÏàͬµÄ Key£¬Ã¿¸ö Key Ö»ÄÜÓ³ÉäÒ»¸ö Value¡£Map ½Ó¿ÚÌṩ 3 ÖÖ¼¯ºÏµÄÊÓͼ£¬Map µÄÄÚÈÝ¿ÉÒÔ±»µ±×÷Ò»×é Key ¼¯ºÏ£¬Ò»×é Value ¼¯ºÏ£¬»òÕßÒ»×é Key-Value Ó³Éä¡£

Map ÌṩµÄÖ÷Òª·½·¨£º

boolean equals(Object o) ±È½Ï¶ÔÏó£»

boolean remove(Object o) ɾ³ýÒ»¸ö¶ÔÏó£»

put(Object key,Object value) Ìí¼Ó key ºÍ value¡£

RandomAccess ½Ó¿Ú

RandomAccess ½Ó¿ÚÊÇÒ»¸ö±êÖ¾½Ó¿Ú£¬±¾Éí²¢Ã»ÓÐÌṩÈκη½·¨£¬ÈÎÎñ·²ÊÇͨ¹ýµ÷Óà RandomAccess ½Ó¿ÚµÄ¶ÔÏ󶼿ÉÒÔÈÏΪÊÇÖ§³Ö¿ìËÙËæ»ú·ÃÎʵĶÔÏ󡣴˽ӿڵÄÖ÷ҪĿµÄÊDZêʶÄÇЩ¿ÉÖ§³Ö¿ìËÙËæ»ú·ÃÎ浀 List ʵÏÖ¡£ÈκÎÒ»¸ö»ùÓÚÊý×éµÄ List ʵÏÖ¶¼ÊµÏÖÁË RaodomAccess ½Ó¿Ú£¬¶ø»ùÓÚÁ´±íµÄʵÏÖÔò¶¼Ã»ÓС£ÒòΪֻÓÐÊý×éÄܹ»½øÐпìËÙµÄËæ»ú·ÃÎÊ£¬¶ø¶ÔÁ´±íµÄËæ»ú·ÃÎÊÐèÒª½øÐÐÁ´±íµÄ±éÀú¡£Òò´Ë£¬´Ë½Ó¿ÚµÄºÃ´¦ÊÇ£¬¿ÉÒÔÔÚÓ¦ÓóÌÐòÖÐÖªµÀÕýÔÚ´¦ÀíµÄ List ¶ÔÏóÊÇ·ñ¿ÉÒÔ½øÐпìËÙËæ»ú·ÃÎÊ£¬´Ó¶øÕë¶Ô²»Í¬µÄ List ½øÐв»Í¬µÄ²Ù×÷£¬ÒÔÌá¸ß³ÌÐòµÄÐÔÄÜ¡£

¼¯ºÏÀà½éÉÜ

LinkedList Àà

LinkedList ʵÏÖÁË List ½Ó¿Ú£¬ÔÊÐí Null ÔªËØ¡£´ËÍâ LinkedList Ìṩ¶îÍâµÄ Get¡¢Remove¡¢Insert µÈ·½·¨ÔÚ LinkedList µÄÊײ¿»òβ²¿²Ù×÷Êý¾Ý¡£ÕâЩ²Ù×÷ʹµÃ LinkedList ¿É±»ÓÃ×÷¶ÑÕ»£¨Stack£©¡¢¶ÓÁУ¨Queue£©»òË«Ïò¶ÓÁУ¨Deque£©¡£Çë×¢Òâ LinkedList ûÓÐͬ²½·½·¨£¬Ëü²»ÊÇÏß³Ìͬ²½µÄ£¬¼´Èç¹û¶à¸öÏß³Ìͬʱ·ÃÎÊÒ»¸ö List£¬Ôò±ØÐë×Ô¼ºÊµÏÖ·ÃÎÊͬ²½¡£Ò»ÖÖ½â¾ö·½·¨ÊÇÔÚ´´½¨ List ʱ¹¹ÔìÒ»¸öͬ²½µÄ List£¬·½·¨Èç

List list = Collections.synchronizedList(new LinkedList(...))£»

ArrayList Àà

ArrayList ʵÏÖÁ˿ɱä´óСµÄÊý×é¡£ËüÔÊÐíËùÓÐÔªËØ£¬°üÀ¨ Null¡£Size¡¢IsEmpty¡¢Get¡¢Set µÈ·½·¨µÄÔËÐÐʱ¼äΪ³£Êý£¬µ«ÊÇ Add ·½·¨¿ªÏúΪ·Ö̯µÄ³£Êý£¬Ìí¼Ó N ¸öÔªËØÐèÒª O(N) µÄʱ¼ä£¬ÆäËûµÄ·½·¨ÔËÐÐʱ¼äΪÏßÐÔ¡£

ÿ¸ö ArrayList ʵÀý¶¼ÓÐÒ»¸öÈÝÁ¿£¨Capacity£©£¬ÓÃÓÚ´æ´¢ÔªËØµÄÊý×éµÄ´óС£¬Õâ¸öÈÝÁ¿¿ÉËæ×Ų»¶ÏÌí¼ÓÐÂÔªËØ¶ø×Ô¶¯Ôö¼Ó¡£µ±ÐèÒª²åÈë´óÁ¿ÔªËØÊ±£¬ÔÚ²åÈëǰ¿ÉÒÔµ÷Óà ensureCapacity ·½·¨À´Ôö¼Ó ArrayList µÄÈÝÁ¿ÒÔÌá¸ß²åÈëЧÂÊ¡£ºÍ LinkedList Ò»Ñù£¬ArrayList Ò²ÊÇÏ̷߳Çͬ²½µÄ£¨unsynchronized£©¡£

ArrayList ÌṩµÄÖ÷Òª·½·¨£º

Boolean add(Object o) ½«Ö¸¶¨ÔªËØÌí¼Óµ½ÁбíµÄĩβ£»

Boolean add(int index,Object element) ÔÚÁбíÖÐÖ¸¶¨Î»ÖüÓÈëÖ¸¶¨ÔªËØ£»

Boolean addAll(Collection c) ½«Ö¸¶¨¼¯ºÏÌí¼Óµ½Áбíĩβ£»

Boolean addAll(int index,Collection c) ÔÚÁбíÖÐÖ¸¶¨Î»ÖüÓÈëÖ¸¶¨¼¯ºÏ£»

Boolean clear() ɾ³ýÁбíÖÐËùÓÐÔªËØ£»

Boolean clone() ·µ»Ø¸ÃÁбíʵÀýµÄÒ»¸ö¿½±´£»

Boolean contains(Object o) ÅжÏÁбíÖÐÊÇ·ñ°üº¬ÔªËØ£»

Boolean ensureCapacity(int m) Ôö¼ÓÁбíµÄÈÝÁ¿£¬Èç¹û±ØÐ룬¸ÃÁбíÄܹ»ÈÝÄÉ m ¸öÔªËØ£»

Object get(int index) ·µ»ØÁбíÖÐÖ¸¶¨Î»ÖõÄÔªËØ£»

Int indexOf(Object elem) ÔÚÁбíÖвéÕÒÖ¸¶¨ÔªËصÄϱꣻ

Int size() ·µ»Øµ±Ç°ÁбíµÄÔªËØ¸öÊý¡£

Vector Àà

Vector ·Ç³£ÀàËÆÓÚ ArrayList£¬Çø±ðÊÇ Vector ÊÇÏß³Ìͬ²½µÄ¡£ÓÉ Vector ´´½¨µÄ Iterator£¬ËäÈ»ºÍ ArrayList ´´½¨µÄ Iterator ÊÇͬһ½Ó¿Ú£¬µ«ÊÇ£¬ÒòΪ Vector ÊÇͬ²½µÄ£¬µ±Ò»¸ö Iterator ±»´´½¨¶øÇÒÕýÔÚ±»Ê¹Óã¬ÁíÒ»¸öÏ̸߳ıäÁË Vector µÄ״̬£¨ÀýÈ磬Ìí¼Ó»òɾ³ýÁËÒ»Ð©ÔªËØ£©£¬Õâʱµ÷Óà Iterator µÄ·½·¨Ê±½«Å׳ö ConcurrentModificationException£¬Òò´Ë±ØÐë²¶»ñ¸ÃÒì³£¡£

Stack Àà

Stack ¼Ì³Ð×Ô Vector£¬ÊµÏÖÁËÒ»¸öºó½øÏȳöµÄ¶ÑÕ»¡£Stack Ìṩ 5 ¸ö¶îÍâµÄ·½·¨Ê¹µÃ Vector µÃÒÔ±»µ±×÷¶ÑջʹÓᣳýÁË»ù±¾µÄ Push ºÍ Pop ·½·¨£¬»¹ÓÐ Peek ·½·¨µÃµ½Õ»¶¥µÄÔªËØ£¬Empty ·½·¨²âÊÔ¶ÑÕ»ÊÇ·ñΪ¿Õ£¬Search ·½·¨¼ì²âÒ»¸öÔªËØÔÚ¶ÑÕ»ÖеÄλÖá£×¢Ò⣬Stack ¸Õ´´½¨ºóÊÇ¿ÕÕ»¡£

Set Àà

Set ÊÇÒ»ÖÖ²»°üº¬Öظ´µÄÔªËØµÄ Collection£¬¼´ÈÎÒâµÄÁ½¸öÔªËØ e1 ºÍ e2 ¶¼ÓÐ e1.equals(e2)=false¡£Set ×î¶àÓÐÒ»¸ö null ÔªËØ¡£ºÜÃ÷ÏÔ£¬Set µÄ¹¹Ô캯ÊýÓÐÒ»¸öÔ¼ÊøÌõ¼þ£¬´«ÈëµÄ Collection ²ÎÊý²»Äܰüº¬Öظ´µÄÔªËØ¡£Çë×¢Ò⣬±ØÐëСÐIJÙ×÷¿É±ä¶ÔÏó£¨Mutable Object£©£¬Èç¹ûÒ»¸ö Set ÖеĿɱäÔªËØ¸Ä±äÁË×ÔÉí״̬£¬Õâ¿ÉÄܻᵼÖÂһЩÎÊÌâ¡£

Hashtable Àà

Hashtable ¼Ì³Ð Map ½Ó¿Ú£¬ÊµÏÖÁËÒ»¸ö»ùÓÚ Key-Value Ó³ÉäµÄ¹þÏ£±í¡£Èκηǿգ¨non-null£©µÄ¶ÔÏ󶼿É×÷Ϊ Key »òÕß Value¡£Ìí¼ÓÊý¾ÝʹÓà Put(Key£¬Value)£¬È¡³öÊý¾ÝʹÓà Get(Key)£¬ÕâÁ½¸ö»ù±¾²Ù×÷µÄʱ¼ä¿ªÏúΪ³£Êý¡£

Hashtable ͨ¹ý Initial Capacity ºÍ Load Factor Á½¸ö²ÎÊýµ÷ÕûÐÔÄÜ¡£Í¨³£È±Ê¡µÄ Load Factor 0.75 ½ÏºÃµØÊµÏÖÁËʱ¼äºÍ¿Õ¼äµÄ¾ùºâ¡£Ôö´ó Load Factor ¿ÉÒÔ½ÚÊ¡¿Õ¼äµ«ÏàÓ¦µÄ²éÕÒʱ¼ä½«Ôö´ó£¬»áÓ°ÏìÏñ Get ºÍ Put ÕâÑùµÄ²Ù×÷¡£Ê¹Óà Hashtable µÄ¼òµ¥Ê¾Àý£¬½« 1¡¢2¡¢3 ÕâÈý¸öÊý×ַŵ½ Hashtable ÀïÃæ£¬ËûÃÇµÄ Key ·Ö±ðÊÇ¡±one¡±¡¢¡±two¡±¡¢¡±three¡±£¬´úÂëÈçÇåµ¥ 2 Ëùʾ¡£

Çåµ¥ 2 .Hashtable ʾÀý

Hashtable numbers = new Hashtable();
numbers.put(¡°one¡±, new Integer(1));
numbers.put(¡°two¡±, new Integer(2));
numbers.put(¡°three¡±, new Integer(3));

Èç¹ûÎÒÃÇÐèҪȡ³öÒ»¸öÊý£¬±ÈÈç 2£¬¿ÉÒÔÓÃÏàÓ¦µÄ key À´È¡³ö£¬´úÂëÈçÇåµ¥ 3 Ëùʾ¡£

Çåµ¥ 3.´Ó Hastable ¶ÁÈ¡Êý¾Ý

Integer n = (Integer)numbers.get(¡°two¡±); 
System.out.println(¡°two =¡±+ n);

 

ÓÉÓÚ×÷Ϊ Key µÄ¶ÔÏó½«Í¨¹ý¼ÆËãÆäÉ¢Áк¯ÊýÀ´È·¶¨ÓëÖ®¶ÔÓ¦µÄ Value µÄλÖã¬Òò´ËÈκÎ×÷Ϊ key µÄ¶ÔÏó¶¼±ØÐëʵÏÖ HashCode ºÍ Equals ·½·¨¡£HashCode ºÍ Equals ·½·¨¼Ì³Ð×Ô¸ùÀà Object£¬Èç¹ûÄãÓÃ×Ô¶¨ÒåµÄÀ൱×÷ Key µÄ»°£¬ÒªÏ൱СÐÄ£¬°´ÕÕÉ¢Áк¯ÊýµÄ¶¨Ò壬Èç¹ûÁ½¸ö¶ÔÏóÏàͬ£¬¼´ obj1.equals(obj2)=true£¬ÔòËüÃÇµÄ HashCode ±ØÐëÏàͬ£¬µ«Èç¹ûÁ½¸ö¶ÔÏó²»Í¬£¬ÔòËüÃÇµÄ HashCode ²»Ò»¶¨²»Í¬£¬Èç¹ûÁ½¸ö²»Í¬¶ÔÏóµÄ HashCode Ïàͬ£¬ÕâÖÖÏÖÏó³ÆÎª³åÍ»£¬³åÍ»»áµ¼Ö²Ù×÷¹þÏ£±íµÄʱ¼ä¿ªÏúÔö´ó£¬ËùÒÔ¾¡Á¿¶¨ÒåºÃµÄ HashCode() ·½·¨£¬Äܼӿì¹þÏ£±íµÄ²Ù×÷¡£

Èç¹ûÏàͬµÄ¶ÔÏóÓв»Í¬µÄ HashCode£¬¶Ô¹þÏ£±íµÄ²Ù×÷»á³öÏÖÒâÏë²»µ½µÄ½á¹û£¨ÆÚ´ýµÄ Get ·½·¨·µ»Ø Null£©£¬Òª±ÜÃâÕâÖÖÎÊÌ⣬×îºÃͬʱ¸´Ð´ Equals ·½·¨ºÍ HashCode ·½·¨£¬¶ø²»ÒªÖ»Ð´ÆäÖÐÒ»¸ö¡£

HashMap Àà

HashMap ºÍ Hashtable ÀàËÆ£¬²»Í¬Ö®´¦ÔÚÓÚ HashMap ÊÇÏ̷߳Çͬ²½µÄ£¬²¢ÇÒÔÊÐí Null£¬¼´ Null Value ºÍ Null Key¡£µ«Êǽ« HashMap ÊÓΪ Collection ʱ£¨values() ·½·¨¿É·µ»Ø Collection£©£¬Æäµü´ú×Ó²Ù×÷ʱ¼ä¿ªÏúºÍ HashMap µÄÈÝÁ¿³É±ÈÀý¡£Òò´Ë£¬Èç¹ûµü´ú²Ù×÷µÄÐÔÄÜÏàµ±ÖØÒªµÄ»°£¬²»Òª½« HashMap µÄ³õʼ»¯ÈÝÁ¿ÉèµÃ¹ý¸ß£¬»òÕß Load Factor ²ÎÊýÉèÖùýµÍ¡£

WeakHashMap Àà

WeakHashMap ÊÇÒ»ÖָĽøµÄ HashMap£¬Ëü¶Ô Key ʵÐС°ÈõÒýÓá±£¬Èç¹ûÒ»¸ö Key ²»ÔÙ±»ÍⲿËùÒýÓã¬ÄÇô¸Ã Key ¿ÉÒÔ±» GC »ØÊÕ¡£

¼¯ºÏÀàʵ¼ù

ArrayList¡¢Vector¡¢LinkedList ¾ùÀ´×Ô AbstractList µÄʵÏÖ£¬¶ø AbstractList Ö±½ÓʵÏÖÁË List ½Ó¿Ú£¬²¢À©Õ¹×Ô AbstarctCollection¡£ArrayList ºÍ Vector ʹÓÃÁËÊý×éʵÏÖ£¬ArrayList ûÓжÔÈκÎÒ»¸ö·½·¨ÌṩÏß³Ìͬ²½£¬Òò´Ë²»ÊÇḬ̈߳²È«µÄ£¬Vector Öоø´ó²¿·Ö·½·¨¶¼×öÁËÏß³Ìͬ²½£¬ÊÇÒ»ÖÖḬ̈߳²È«µÄʵÏÖ¡£LinkedList ʹÓÃÁËÑ­»·Ë«ÏòÁ´±íÊý¾Ý½á¹¹£¬ÓÉһϵÁбíÏîÁ¬½Ó¶ø³É£¬Ò»¸ö±íÏî×ÜÊǰüº¬ 3 ¸ö²¿·Ö£¬ÔªËØÄÚÈÝ¡¢Ç°Çý±íÏîºÍºóÇý±íÏî¡£

µ± ArrayList ¶ÔÈÝÁ¿µÄÐèÇ󳬹ýµ±Ç°Êý×éµÄ´óСʱ£¬ÐèÒª½øÐÐÀ©ÈÝ¡£À©Èݹý³ÌÖУ¬»á½øÐдóÁ¿µÄÊý×鏴֯²Ù×÷£¬¶øÊý×é¸´ÖÆÊ±£¬×îÖÕ½«µ÷Óà System.arraycopy() ·½·¨¡£LinkedList ÓÉÓÚʹÓÃÁËÁ´±íµÄ½á¹¹£¬Òò´Ë²»ÐèҪά»¤ÈÝÁ¿µÄ´óС£¬È»¶øÃ¿´ÎµÄÔªËØÔö¼Ó¶¼ÐèҪн¨Ò»¸ö Entry ¶ÔÏ󣬲¢½øÐиü¶àµÄ¸³Öµ²Ù×÷£¬ÔÚÆµ·±µÄϵͳµ÷ÓÃÏ£¬¶ÔÐÔÄÜ»á²úÉúÒ»¶¨µÄÓ°Ï죬ÔÚ²»¼ä¶ÏµØÉú³ÉеĶÔÏó»¹ÊÇÕ¼ÓÃÁËÒ»¶¨µÄ×ÊÔ´¡£¶øÒòΪÊý×éµÄÁ¬ÐøÐÔ£¬Òò´Ë×ÜÊÇÔÚβ¶ËÔö¼ÓÔªËØÊ±£¬Ö»ÓÐÔڿռ䲻×ãʱ²Å²úÉúÊý×éÀ©ÈݺÍÊý×鏴֯¡£

ArrayList ÊÇ»ùÓÚÊý×éʵÏֵ쬶øÊý×éÊÇÒ»¿éÁ¬ÐøµÄÄÚ´æ¿Õ¼ä£¬Èç¹ûÔÚÊý×éµÄÈÎÒâλÖòåÈëÔªËØ£¬±ØÈ»µ¼ÖÂÔÚ¸ÃλÖúóµÄËùÓÐÔªËØÐèÒªÖØÐÂÅÅÁУ¬Òò´ËÆäЧÂʽϲ¾¡¿ÉÄܽ«Êý¾Ý²åÈ뵽β²¿¡£LinkedList ²»»áÒòΪ²åÈëÊý¾Ýµ¼ÖÂÐÔÄÜϽµ¡£

ArrayList µÄÿһ´ÎÓÐЧµÄÔªËØÉ¾³ý²Ù×÷ºó¶¼Òª½øÐÐÊý×éµÄÖØ×飬²¢ÇÒɾ³ýµÄÔªËØÎ»ÖÃÔ½¿¿Ç°£¬Êý×éÖØ×éʱµÄ¿ªÏúÔ½´ó£¬ÒªÉ¾³ýµÄÔªËØÎ»ÖÃÔ½¿¿ºó£¬¿ªÏúԽС¡£LinkedList ÒªÒÆ³ýÖмäµÄÊý¾ÝÐèÒª±ãÀûÍê°ë¸ö List¡£

Çåµ¥ 4. ArrayList ºÍ LinkedList ʹÓôúÂë

import java.util.ArrayList;
import java.util.LinkedList;

public class ArrayListandLinkedList {
public static void main(String[] args){
long start = System.currentTimeMillis();
ArrayList list = new ArrayList();
Object obj = new Object();
for(int i=0;i<5000000;i++){
list.add(obj);
}
long end = System.currentTimeMillis();
System.out.println(end-start);

start = System.currentTimeMillis();
LinkedList list1 = new LinkedList();
Object obj1 = new Object();
for(int i=0;i<5000000;i++){
list1.add(obj1);
}
end = System.currentTimeMillis();
System.out.println(end-start);

start = System.currentTimeMillis();
Object obj2 = new Object();
for(int i=0;i<1000;i++){
list.add(0,obj2);
}
end = System.currentTimeMillis();
System.out.println(end-start);

start = System.currentTimeMillis();
Object obj3 = new Object();
for(int i=0;i<1000;i++){
list1.add(obj1);
}
end = System.currentTimeMillis();
System.out.println(end-start);

start = System.currentTimeMillis();
list.remove(0);
end = System.currentTimeMillis();
System.out.println(end-start);

start = System.currentTimeMillis();
list1.remove(250000);
end = System.currentTimeMillis();
System.out.println(end-start);

}
}

Çåµ¥ 5. ÔËÐÐÊä³ö

639
1296
6969
0
0
15

HashMap Êǽ« Key ×ö Hash Ëã·¨£¬È»ºó½« Hash ÖµÓ³Éäµ½ÄÚ´æµØÖ·£¬Ö±½ÓÈ¡µÃ Key Ëù¶ÔÓ¦µÄÊý¾Ý¡£ÔÚ HashMap ÖУ¬µ×²ãÊý¾Ý½á¹¹Ê¹ÓõÄÊÇÊý×飬ËùνµÄÄÚ´æµØÖ·¼´Êý×éµÄϱêË÷Òý¡£HashMap µÄ¸ßÐÔÄÜÐèÒª±£Ö¤ÒÔϼ¸µã£º

Hash Ëã·¨±ØÐëÊǸßЧµÄ£»

Hash Öµµ½ÄÚ´æµØÖ· (Êý×éË÷Òý) µÄËã·¨ÊÇ¿ìËٵģ»

¸ù¾ÝÄÚ´æµØÖ· (Êý×éË÷Òý) ¿ÉÒÔÖ±½ÓÈ¡µÃ¶ÔÓ¦µÄÖµ¡£

HashMap ʵ¼ÊÉÏÊÇÒ»¸öÁ´±íµÄÊý×é¡£Ç°ÃæÒѾ­½éÉܹý£¬»ùÓÚ HashMap µÄÁ´±í·½Ê½ÊµÏÖ»úÖÆ£¬Ö»Òª HashCode() ºÍ Hash() ·½·¨ÊµÏÖµÃ×ã¹»ºÃ£¬Äܹ»¾¡¿ÉÄܵؼõÉÙ³åÍ»µÄ²úÉú£¬ÄÇô¶Ô HashMap µÄ²Ù×÷¼¸ºõµÈ¼ÛÓÚ¶ÔÊý×éµÄËæ»ú·ÃÎʲÙ×÷£¬¾ßÓкܺõÄÐÔÄÜ¡£µ«ÊÇ£¬Èç¹û HashCode() »òÕß Hash() ·½·¨ÊµÏֽϲÔÚ´óÁ¿³åÍ»²úÉúµÄÇé¿öÏ£¬HashMap ÊÂʵÉϾÍÍË»¯Îª¼¸¸öÁ´±í£¬¶Ô HashMap µÄ²Ù×÷µÈ¼ÛÓÚ±éÀúÁ´±í£¬´ËʱÐÔÄܺܲ

HashMap µÄÒ»¸ö¹¦ÄÜȱµãÊÇËüµÄÎÞÐòÐÔ£¬±»´æÈëµ½ HashMap ÖеÄÔªËØ£¬ÔÚ±éÀú HashMap ʱ£¬ÆäÊä³öÊÇÎÞÐòµÄ¡£Èç¹ûÏ£ÍûÔªËØ±£³ÖÊäÈëµÄ˳Ðò£¬¿ÉÒÔʹÓà LinkedHashMap Ìæ´ú¡£

LinkedHashMap ¼Ì³Ð×Ô HashMap£¬¾ßÓиßЧÐÔ£¬Í¬Ê±ÔÚ HashMap µÄ»ù´¡ÉÏ£¬ÓÖÔÚÄÚ²¿Ôö¼ÓÁËÒ»¸öÁ´±í£¬ÓÃÒÔ´æ·ÅÔªËØµÄ˳Ðò¡£

HashMap ͨ¹ý hash Ëã·¨¿ÉÒÔ×î¿ìËٵؽøÐÐ Put() ºÍ Get() ²Ù×÷¡£TreeMap ÔòÌṩÁËÒ»ÖÖÍêÈ«²»Í¬µÄ Map ʵÏÖ¡£´Ó¹¦ÄÜÉϽ²£¬TreeMap ÓÐ×Å±È HashMap ¸üΪǿ´óµÄ¹¦ÄÜ£¬ËüʵÏÖÁË SortedMap ½Ó¿Ú£¬ÕâÒâζ×ÅËü¿ÉÒÔ¶ÔÔªËØ½øÐÐÅÅÐò¡£TreeMap µÄÐÔÄÜÂÔ΢µÍÓÚ HashMap¡£Èç¹ûÔÚ¿ª·¢ÖÐÐèÒª¶ÔÔªËØ½øÐÐÅÅÐò£¬ÄÇôʹÓà HashMap ±ãÎÞ·¨ÊµÏÖÕâÖÖ¹¦ÄÜ£¬Ê¹Óà TreeMap µÄµü´úÊä³ö½«»áÒÔÔªËØË³Ðò½øÐС£LinkedHashMap ÊÇ»ùÓÚÔªËØ½øÈ뼯ºÏµÄ˳Ðò»òÕß±»·ÃÎʵÄÏȺó˳ÐòÅÅÐò£¬TreeMap ÔòÊÇ»ùÓÚÔªËØµÄ¹ÌÓÐ˳Ðò (ÓÉ Comparator »òÕß Comparable È·¶¨)¡£

LinkedHashMap ÊǸù¾ÝÔªËØÔö¼Ó»òÕß·ÃÎʵÄÏȺó˳Ðò½øÐÐÅÅÐò£¬¶ø TreeMap Ôò¸ù¾ÝÔªËØµÄ Key ½øÐÐÅÅÐò¡£

Çåµ¥ 6 Ëùʾ´úÂëÑÝʾÁËʹÓà TreeMap ʵÏÖÒµÎñÂß¼­µÄÅÅÐò¡£

Çåµ¥ 6. TreeMap ʵÏÖÅÅÐò

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class Student implements Comparable<Student>{

public String name;
public int score;
public Student(String name,int score){
this.name = name;
this.score = score;
}

@Override
//¸æËß TreeMap ÈçºÎÅÅÐò
public int compareTo(Student o) {
// TODO Auto-generated method stub
if(o.score<this.score){
return 1;
}else if(o.score>this.score){
return -1;
}
return 0;
}

@Override
public String toString(){
StringBuffer sb = new StringBuffer();
sb.append("name:");
sb.append(name);
sb.append(" ");
sb.append("score:");
sb.append(score);
return sb.toString();
}

public static void main(String[] args){
TreeMap map = new TreeMap();
Student s1 = new Student("1",100);
Student s2 = new Student("2",99);
Student s3 = new Student("3",97);
Student s4 = new Student("4",91);
map.put(s1, new StudentDetailInfo(s1));
map.put(s2, new StudentDetailInfo(s2));
map.put(s3, new StudentDetailInfo(s3));
map.put(s4, new StudentDetailInfo(s4));

//´òÓ¡·ÖÊýλÓÚ S4 ºÍ S2 Ö®¼äµÄÈË
Map map1=((TreeMap)map).subMap(s4, s2);
for(Iterator iterator=map1.keySet().iterator();iterator.hasNext();){
Student key = (Student)iterator.next();
System.out.println(key+"->"+map.get(key));
}
System.out.println("subMap end");

//´òÓ¡·ÖÊý±È s1 µÍµÄÈË
map1=((TreeMap)map).headMap(s1);
for(Iterator iterator=map1.keySet().iterator();iterator.hasNext();){
Student key = (Student)iterator.next();
System.out.println(key+"->"+map.get(key));
}
System.out.println("subMap end");

//´òÓ¡·ÖÊý±È s1 ¸ßµÄÈË
map1=((TreeMap)map).tailMap(s1);
for(Iterator iterator=map1.keySet().iterator();iterator.hasNext();){
Student key = (Student)iterator.next();
System.out.println(key+"->"+map.get(key));
}
System.out.println("subMap end");
}

}

class StudentDetailInfo{
Student s;
public StudentDetailInfo(Student s){
this.s = s;
}
@Override
public String toString(){
return s.name + "'s detail information";
}
}

Çåµ¥ 7 .ÔËÐÐÊä³ö

name:4 score:91->4's detail information
name:3 score:97->3's detail information
subMap end
name:4 score:91->4's detail information
name:3 score:97->3's detail information
name:2 score:99->2's detail information
subMap end
name:1 score:100->1's detail information
subMap end

WeakHashMap ÌØµãÊǵ±³ýÁË×ÔÉíÓÐ¶Ô Key µÄÒýÓÃÍ⣬Èç¹û´Ë Key ûÓÐÆäËûÒýÓã¬ÄÇô´Ë Map »á×Ô¶¯¶ªÆú¸ÃÖµ¡£ÈçÇåµ¥ 8 Ëùʾ´úÂëÉùÃ÷ÁËÁ½¸ö Map ¶ÔÏó£¬Ò»¸öÊÇ HashMap£¬Ò»¸öÊÇ WeakHashMap£¬Í¬Ê±ÏòÁ½¸ö map ÖзÅÈë A¡¢B Á½¸ö¶ÔÏ󣬵± HashMap ɾ³ý A£¬²¢ÇÒ A¡¢B ¶¼Ö¸Ïò Null ʱ£¬WeakHashMap ÖÐµÄ A ½«×Ô¶¯±»»ØÊÕµô¡£³öÏÖÕâ¸ö×´¿öµÄÔ­ÒòÊÇ£¬¶ÔÓÚ A ¶ÔÏó¶øÑÔ£¬µ± HashMap ɾ³ý²¢ÇÒ½« A Ö¸Ïò Null ºó£¬³ýÁË WeakHashMap Öл¹±£´æ A ÍâÒѾ­Ã»ÓÐÖ¸Ïò A µÄÖ¸ÕëÁË£¬ËùÒÔ WeakHashMap »á×Ô¶¯ÉáÆúµô a£¬¶ø¶ÔÓÚ B ¶ÔÏóËäȻָÏòÁË null£¬µ« HashMap Öл¹ÓÐÖ¸Ïò B µÄÖ¸Õ룬ËùÒÔ WeakHashMap ½«»á±£Áô B ¶ÔÏó¡£

Çåµ¥ 8.WeakHashMap ʾÀý´úÂë

import java.util.HashMap; 
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;

public class WeakHashMapTest {
public static void main(String[] args) throws Exception {
String a = new String("a");
String b = new String("b");
Map weakmap = new WeakHashMap();
Map map = new HashMap();
map.put(a, "aaa");
map.put(b, "bbb");
weakmap.put(a, "aaa");
weakmap.put(b, "bbb");
map.remove(a);
a=null;
b=null;
System.gc();
Iterator i = map.entrySet().iterator();
while (i.hasNext()) {
Map.Entry en = (Map.Entry)i.next();
System.out.println("map:"+en.getKey()+":"+en.getValue());
}
Iterator j = weakmap.entrySet().iterator();
while (j.hasNext()) {
Map.Entry en = (Map.Entry)j.next();
System.out.println("weakmap:"+en.getKey()+":"+en.getValue());
}
}
}

Çåµ¥ 9 .ÔËÐÐÊä³ö

map:b:bbb
weakmap:b:bbb

WeakHashMap Ö÷Ҫͨ¹ý expungeStaleEntries Õâ¸öº¯ÊýÀ´ÊµÏÖÒÆ³ýÆäÄÚ²¿²»ÓõÄÌõÄ¿£¬´Ó¶ø´ïµ½×Ô¶¯ÊÍ·ÅÄÚ´æµÄÄ¿µÄ¡£»ù±¾ÉÏÖ»Òª¶Ô WeakHashMap µÄÄÚÈݽøÐзÃÎʾͻáµ÷ÓÃÕâ¸öº¯Êý£¬´Ó¶ø´ïµ½Çå³ýÆäÄÚ²¿²»ÔÙΪÍⲿÒýÓõÄÌõÄ¿¡£µ«ÊÇÈç¹ûÔ¤ÏÈÉú³ÉÁË WeakHashMap£¬¶øÔÚ GC ÒÔǰÓÖ²»Ôø·ÃÎʸà WeakHashMap, ÄDz»ÊǾͲ»ÄÜÊÍ·ÅÄÚ´æÁËÂð£¿

Çåµ¥ 10. WeakHashMapTest1

import java.util.ArrayList;
import java.util.List;
import java.util.WeakHashMap;

public class WeakHashMapTest1 {
public static void main(String[] args) throws Exception {
List<WeakHashMap<byte[][], byte[][]>> maps = new ArrayList<WeakHashMap<byte[][], byte[][]>>();
for (int i = 0; i < 1000; i++) {
WeakHashMap<byte[][], byte[][]> d = new WeakHashMap<byte[][], byte[][]>();
d.put(new byte[1000][1000], new byte[1000][1000]);
maps.add(d);
System.gc();
System.err.println(i);
}
}
}

²»¸Ä±äÈκΠJVM ²ÎÊýµÄÇé¿öÔËÐÐÇåµ¥ 10 Ëùʾ´úÂ룬ÓÉÓÚ Java ĬÈÏÄÚ´æÊÇ 64M£¬Å׳öÄÚ´æÒç³öÁË´íÎó¡£

Çåµ¥ 11. ÔËÐÐÊä³ö

241
242
243
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at WeakHashMapTest1.main(WeakHashMapTest1.java:10)

¹û²»ÆäÈ»£¬WeakHashMap Õâ¸öʱºò²¢Ã»ÓÐ×Ô¶¯°ïÎÒÃÇÊͷŲ»ÓõÄÄÚ´æ¡£Çåµ¥ 12 Ëùʾ´úÂë²»»á³öÏÖÄÚ´æÒç³öÎÊÌâ¡£

Çåµ¥ 12. WeakHashMapTest2

import java.util.ArrayList;
import java.util.List;
import java.util.WeakHashMap;

public class WeakHashMapTest2 {
public static void main(String[] args) throws Exception {
List<WeakHashMap<byte[][], byte[][]>> maps = new ArrayList<WeakHashMap<byte[][], byte[][]>>();
for (int i = 0; i < 1000; i++) {
WeakHashMap<byte[][], byte[][]> d = new WeakHashMap<byte[][], byte[][]>();
d.put(new byte[1000][1000], new byte[1000][1000]);
maps.add(d);
System.gc();
System.err.println(i);
for (int j = 0; j < i; j++) {
System.err.println(j + " size" + maps.get(j).size());
}
}
}
}

ÔËÐнá¹û·¢ÏÖÕâ´Î²âÊÔÊä³öÕý³£, ²»ÔÙ³öÏÖÄÚ´æÒç³öÎÊÌâ¡£

×ܵÄÀ´Ëµ£¬WeakHashMap ²¢²»ÊÇÄãʲôҲ¸ÉËü¾ÍÄÜ×Ô¶¯ÊÍ·ÅÄÚ²¿²»ÓõĶÔÏóµÄ£¬¶øÊÇÔÚÄã·ÃÎÊËüµÄÄÚÈݵÄʱºòÊÍ·ÅÄÚ²¿²»ÓõĶÔÏó¡£

WeakHashMap ʵÏÖÈõÒýÓã¬ÊÇÒòΪËüµÄ Entry<K,V>ÊǼ̳Ð×Ô WeakReference<K>µÄ£¬

ÔÚ WeakHashMap$Entry<K,V>µÄÀඨÒå¼°¹¹Ô캯ÊýÀïÃæÈçÇåµ¥ 13 Ëùʾ¡£

Çåµ¥ 13. WeakHashMap ÀඨÒå

private static class Entry<K,V> extends WeakReference<K> 
implements Map.Entry<K,V>
Entry(K key, V value, ReferenceQueue<K>
queue,int hash, Entry<K,V> next) {
super(key, queue);
this.value = value;
this.hash = hash;
this.next = next;
}

Çë×¢ÒâËü¹¹Ô츸ÀàµÄÓï¾ä£º¡°super(key, queue);¡±£¬´«ÈëµÄÊÇ Key£¬Òò´Ë Key ²ÅÊǽøÐÐÈõÒýÓõģ¬Value ÊÇÖ±½ÓÇ¿ÒýÓùØÁªÔÚ this.value Ö®ÖС£ÔÚ System.gc() ʱ£¬Key ÖÐµÄ Byte Êý×é½øÐÐÁË»ØÊÕ£¬¶ø Value ÒÀÈ»±£³Ö (Value ±»Ç¿¹ØÁªµ½ Entry ÉÏ£¬Entry ÓÖ¹ØÁªÔÚ Map ÖУ¬Map ¹ØÁªÔÚ ArrayList ÖÐ)¡£

For Ñ­»·ÖÐÿ´Î¶¼ New Ò»¸öÐ嵀 WeakHashMap£¬ÔÚ Put ²Ù×÷ºó£¬ËäÈ» GC ½« WeakReference µÄ Key ÖÐµÄ Byte Êý×黨ÊÕÁË£¬²¢½«Ê¼þ֪ͨµ½ÁË ReferenceQueue£¬µ«ºóÐøÈ´Ã»ÓÐÏàÓ¦µÄ¶¯×÷È¥´¥·¢ WeakHashMap È¥´¦Àí ReferenceQueue£¬ËùÒÔ WeakReference °ü×° Key ÒÀÈ»´æÔÚÓÚ WeakHashMap ÖУ¬Æä¶ÔÓ¦µÄ value Ò²µ±È»´æÔÚ¡£

ÄÇ value ÊǺÎʱ±»Çå³ýµÄÄØ? ¶ÔÇåµ¥ 10 ºÍÇåµ¥ 11 Á½¸öʾÀý³ÌÐò½øÐзÖÎö¿ÉÖª£¬Çåµ¥ 11 µÄ maps.get(j).size() ´¥·¢ÁË Value µÄ»ØÊÕ£¬ÄÇÓÖÈçºÎ´¥·¢µÄÄØ£¿²é¿´ WeakHashMap Ô´Âë¿ÉÖª,Size ·½·¨µ÷ÓÃÁË expungeStaleEntries ·½·¨£¬¸Ã·½·¨¶Ô JVM Òª»ØÊÕµÄµÄ Entry(Quene ÖÐ) ½øÐбéÀú£¬²¢½« Entry µÄ Value Öÿգ¬»ØÊÕÁËÄÚ´æ¡£ËùÒÔЧ¹ûÊÇ Key ÔÚ GC µÄʱºò±»Çå³ý£¬Value ÔÚ Key Çå³ýºó·ÃÎÊ WeakHashMap ±»Çå³ý¡£

WeakHashMap ÀàÊÇÏ̲߳»Í¬²½µÄ£¬¿ÉÒÔʹÓà Collections.synchronizedMap ·½·¨À´¹¹Ôìͬ²½µÄ WeakHashMap, ÿ¸ö¼ü¶ÔÏó¼ä½ÓµØ´æ´¢ÎªÒ»¸öÈõÒýÓõÄָʾ¶ÔÏó¡£Òò´Ë£¬²»¹ÜÊÇÔÚÓ³ÉäÄÚ»¹ÊÇÔÚÓ³ÉäÖ®Í⣬ֻÓÐÔÚÀ¬»ø»ØÊÕÆ÷Çå³ýij¸ö¼üµÄÈõÒýÓÃÖ®ºó£¬¸Ã¼ü²Å»á×Ô¶¯ÒƳý¡£ÐèҪעÒâµÄÊÇ£¬WeakHashMap ÖеÄÖµ¶ÔÏóÓÉÆÕͨµÄÇ¿ÒýÓñ£³Ö¡£Òò´ËÓ¦¸ÃСÐĽ÷É÷£¬È·±£Öµ¶ÔÏó²»»áÖ±½Ó»ò¼ä½ÓµØÇ¿ÒýÓÃÆä×ÔÉíµÄ¼ü£¬ÒòΪÕâ»á×èÖ¹¼üµÄ¶ªÆú¡£×¢Ò⣬ֵ¶ÔÏó¿ÉÒÔͨ¹ý WeakHashMap ±¾Éí¼ä½ÓÒýÓÃÆä¶ÔÓ¦µÄ¼ü£¬Õâ¾ÍÊÇ˵£¬Ä³¸öÖµ¶ÔÏó¿ÉÄÜÇ¿ÒýÓÃij¸öÆäËûµÄ¼ü¶ÔÏ󣬶øÓë¸Ã¼ü¶ÔÏóÏà¹ØÁªµÄÖµ¶ÔÏóת¶øÇ¿ÒýÓõÚÒ»¸öÖµ¶ÔÏóµÄ¼ü¡£

´¦Àí´ËÎÊÌâµÄÒ»ÖÖ·½·¨ÊÇ£¬ÔÚ²åÈëǰ½«Öµ×ÔÉí°ü×°ÔÚ WeakReferences ÖУ¬È磺m.put(key, new WeakReference(value))£¬È»ºó£¬·Ö±ðÓà get ½øÐнâ°ü£¬¸ÃÀàËùÓС°collection ÊÓͼ·½·¨¡±·µ»ØµÄµü´úÆ÷¾ùÊÇ¿ìËÙʧ°ÜµÄ£¬ÔÚµü´úÆ÷´´½¨Ö®ºó£¬Èç¹û´Ó½á¹¹É϶ÔÓ³Éä½øÐÐÐ޸쬳ý·Çͨ¹ýµü´úÆ÷×ÔÉíµÄ Remove »ò Add ·½·¨£¬ÆäËûÈκÎʱ¼äÈκη½Ê½µÄÐ޸쬵ü´úÆ÷¶¼½«Å׳ö ConcurrentModificationException¡£Òò´Ë£¬Ãæ¶Ô²¢·¢µÄÐ޸쬵ü´úÆ÷ºÜ¿ì¾ÍÍêȫʧ°Ü£¬¶ø²»ÊÇð×ÅÔÚ½«À´²»È·¶¨µÄʱ¼äÈÎÒâ·¢Éú²»È·¶¨ÐÐΪµÄ·çÏÕ¡£

×¢Ò⣬ÎÒÃDz»ÄÜÈ·±£µü´úÆ÷²»Ê§°Ü£¬Ò»°ãÀ´Ëµ£¬´æÔÚ²»Í¬²½µÄ²¢·¢ÐÞ¸Äʱ£¬²»¿ÉÄÜ×ö³öÈκÎÍêȫȷ¶¨µÄ±£Ö¤¡£

×ܽá

×ÛºÏÇ°ÃæµÄ½éÉܺÍʵÀý´úÂ룬ÎÒÃÇ¿ÉÒÔÖªµÀ£¬Èç¹ûÉæ¼°µ½¶ÑÕ»¡¢¶ÓÁеȲÙ×÷£¬Ó¦¸Ã¿¼ÂÇÓà List¡£¶ÔÓÚÐèÒª¿ìËÙ²åÈ롢ɾ³ýÔªËØµÈ²Ù×÷£¬Ó¦¸ÃʹÓà LinkedList¡£Èç¹ûÐèÒª¿ìËÙËæ»ú·ÃÎÊÔªËØ£¬Ó¦¸ÃʹÓà ArrayList¡£Èç¹û³ÌÐòÔÚµ¥Ï̻߳·¾³ÖУ¬»òÕß·ÃÎʽö½öÔÚÒ»¸öÏß³ÌÖнøÐУ¬¿¼ÂÇ·Çͬ²½µÄÀ࣬ÆäЧÂʽϸߡ£Èç¹û¶à¸öÏ߳̿ÉÄÜͬʱ²Ù×÷Ò»¸öÀ࣬Ӧ¸ÃʹÓÃͬ²½µÄÀà¡£ÒªÌØ±ð×¢Òâ¶Ô¹þÏ£±íµÄ²Ù×÷£¬×÷Ϊ Key µÄ¶ÔÏóÒªÕýÈ·¸´Ð´ Equals ºÍ HashCode ·½·¨¡£¾¡Á¿·µ»Ø½Ó¿Ú¶ø·Çʵ¼ÊµÄÀàÐÍ£¬Èç·µ»Ø List ¶ø·Ç ArrayList£¬ÕâÑùÈç¹ûÒÔºóÐèÒª½« ArrayList »»³É LinkedList ʱ£¬¿Í»§¶Ë´úÂë²»Óøı䣬Õâ¾ÍÊÇÕë¶Ô³éÏó½øÐбà³Ì˼Ïë¡£

±¾ÎÄÖ»ÊÇÕë¶ÔÓ¦ÓòãÃæµÄ·ÖÏí£¬ºóÐøÎÄÕ»áÕë¶Ô¾ßÌåÔ´´úÂë¼¶±ðµÄʵÏÖ½øÐÐÉîÈë½éÉÜ£¬Ò²»á¶Ô¾ßÌåʵÏÖËù»ùÓÚµÄËã·¨½øÐÐÉîÈë½éÉÜ£¬ÇëÓÐÐèÒªµÄ¶ÁÕß¹Ø×¢ºóÐøÎÄÕ¡£

   
1936 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ