±¾ÎÄÊ×ÏÈÕë¶Ô
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. ÔËÐÐÊä³ö
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 .ÔËÐÐÊä³ö
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
ʱ£¬¿Í»§¶Ë´úÂë²»Óøı䣬Õâ¾ÍÊÇÕë¶Ô³éÏó½øÐбà³Ì˼Ïë¡£
±¾ÎÄÖ»ÊÇÕë¶ÔÓ¦ÓòãÃæµÄ·ÖÏí£¬ºóÐøÎÄÕ»áÕë¶Ô¾ßÌåÔ´´úÂë¼¶±ðµÄʵÏÖ½øÐÐÉîÈë½éÉÜ£¬Ò²»á¶Ô¾ßÌåʵÏÖËù»ùÓÚµÄËã·¨½øÐÐÉîÈë½éÉÜ£¬ÇëÓÐÐèÒªµÄ¶ÁÕß¹Ø×¢ºóÐøÎÄÕ¡£ |