¡¶JAVAÓëģʽ¡·µÚ19Ìì¨Dµü´ú×Óģʽ (Áù)

2014-11-24 08:31:50 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 13
}

}

¡¡¡¡ÉÏÃæµÄÀý×ÓÊ×ÏÈ´´½¨ÁËÒ»¸ö¾Û¼¯ÀàʵÀý£¬È»ºóµ÷Óþۼ¯¶ÔÏóµÄ¹¤³§·½·¨createIterator()ÒԵõ½Ò»¸öµü´ú×Ó¶ÔÏó¡£Ôڵõ½µü´ú×ÓµÄʵÀýºó£¬¿Í»§¶Ë¿ªÊ¼µü´ú¹ý³Ì£¬´òÓ¡³öËùÓеľۼ¯ÔªËØ¡£

Ö÷¶¯µü´ú×Ӻͱ»¶¯µü´ú×Ó
¡¡¡¡Ö÷¶¯µü´ú×Ӻͱ»¶¯µü´ú×ÓÓÖ³Æ×÷Íⲿµü´ú×ÓºÍÄÚ²¿µü´ú×Ó¡£

¡¡¡¡ËùνÖ÷¶¯£¨Íⲿ£©µü´ú×Ó£¬Ö¸µÄÊÇÓɿͻ§¶ËÀ´¿ØÖƵü´úÏÂÒ»¸öÔªËØµÄ²½Ö裬¿Í»§¶Ë»áÃ÷ÏÔµ÷Óõü´ú×ÓµÄnext()µÈµü´ú·½·¨£¬ÔÚ±éÀú¹ý³ÌÖÐÏòǰ½øÐС£

¡¡¡¡Ëùν±»¶¯£¨ÄÚ²¿£©µü´ú×Ó£¬Ö¸µÄÊÇÓɵü´ú×Ó×Ô¼ºÀ´¿ØÖƵü´úÏÂÒ»¸öÔªËØµÄ²½Öè¡£Òò´Ë£¬Èç¹ûÏëÒªÔÚµü´úµÄ¹ý³ÌÖÐÍê³É¹¤×÷µÄ»°£¬¿Í»§¶Ë¾ÍÐèÒª°Ñ²Ù×÷´«µÝ¸øµü´ú×Ó£¬µü´ú×ÓÔÚµü´úµÄʱºò»áÔÚÿ¸öÔªËØÉÏÖ´ÐÐÕâ¸ö²Ù×÷£¬ÀàËÆÓÚJAVAµÄ»Øµ÷»úÖÆ¡£

¡¡¡¡×ÜÌåÀ´ËµÍⲿµü´úÆ÷±ÈÄÚ²¿µü´úÆ÷ÒªÁé»îһЩ£¬Òò´ËÎÒÃdz£¼ûµÄʵÏÖ¶àÊôÓÚÖ÷¶¯µü´ú×Ó¡£

¾²Ì¬µü´ú×ӺͶ¯Ì¬µü´ú×Ó
¡¡¡¡¡ñ¡¡¡¡¾²Ì¬µü´ú×ÓÓɾۼ¯¶ÔÏó´´½¨£¬²¢³ÖÓоۼ¯¶ÔÏóµÄÒ»·Ý¿ìÕÕ(snapshot)£¬ÔÚ²úÉúºóÕâ¸ö¿ìÕÕµÄÄÚÈݾͲ»Ôٱ仯¡£¿Í»§¶Ë¿ÉÒÔ¼ÌÐøÐÞ¸ÄÔ­¾Û¼¯µÄÄÚÈÝ£¬µ«Êǵü´ú×Ó¶ÔÏ󲻻ᷴӳ³ö¾Û¼¯µÄб仯¡£

¡¡¡¡¾²Ì¬µü´ú×ӵĺô¦ÊÇËüµÄ°²È«ÐԺͼòÒ×ÐÔ£¬»»ÑÔÖ®£¬¾²Ì¬µü´ú×ÓÒ×ÓÚʵÏÖ£¬²»ÈÝÒ׳öÏÖ´íÎó¡£µ«ÊÇÓÉÓÚ¾²Ì¬µü´ú×Ó½«Ô­¾Û¼¯¸´ÖÆÁËÒ»·Ý£¬Òò´ËËüµÄ¶Ì´¦ÊǶÔʱ¼äºÍÄÚ´æ×ÊÔ´µÄÏûºÄ¡£

¡¡¡¡¡ñ¡¡¡¡¶¯Ì¬µü´ú×ÓÔòÓ뾲̬µü´ú×ÓÍêÈ«Ïà·´£¬ÔÚµü´ú×Ó±»²úÉúÖ®ºó£¬µü´ú×Ó±£³Ö×ŶԾۼ¯ÔªËصÄÒýÓã¬Òò´Ë£¬ÈκζÔÔ­¾Û¼¯ÄÚÈݵÄÐ޸ͼ»áÔÚµü´ú×Ó¶ÔÏóÉÏ·´Ó³³öÀ´¡£

¡¡¡¡ÍêÕûµÄ¶¯Ì¬µü´ú×Ó²»ÈÝÒ×ʵÏÖ£¬µ«ÊǼò»¯µÄ¶¯Ì¬µü´ú×Ó²¢²»ÄÑʵÏÖ¡£´ó¶àÊýJAVAÉè¼ÆÊ¦Óöµ½µÄµü´ú×Ó¶¼ÊÇÕâÖÖ¼ò»¯µÄ¶¯Ì¬µü´ú×Ó¡£ÎªÁË˵Ã÷ʲôÊǼò»¯µÄ¶¯Ì¬µü´ú×Ó£¬Ê×ÏÈÐèÒª½éÉÜÒ»¸öеĸÅÄFail Fast¡£

Fail Fast
¡¡¡¡Èç¹ûÒ»¸öËã·¨¿ªÊ¼Ö®ºó£¬ËüµÄÔËËã»·¾³·¢Éú±ä»¯£¬Ê¹µÃËã·¨ÎÞ·¨½øÐбØÐèµÄµ÷Õûʱ£¬Õâ¸öËã·¨¾ÍÓ¦µ±Á¢¼´·¢³ö¹ÊÕÏÐźš£Õâ¾ÍÊÇFail FastµÄº¬Òå¡£

¡¡¡¡Èç¹û¾Û¼¯¶ÔÏóµÄÔªËØÔÚÒ»¸ö¶¯Ì¬µü´ú×ӵĵü´ú¹ý³ÌÖз¢Éú±ä»¯Ê±£¬µü´ú¹ý³Ì»áÊܵ½Ó°Ïì¶ø±äµÃ²»ÄÜ×ÔÇ¡¡£Õâʱºò£¬µü´ú×Ó¾ÍÓ¦µ±Á¢¼´Å׳öÒ»¸öÒì³£¡£ÕâÖÖµü´ú×Ó¾ÍÊÇʵÏÖÁËFail Fast¹¦Äܵĵü´ú×Ó¡£

Fail FastÔÚJAVA¾Û¼¯ÖеÄʹÓÃ
¡¡¡¡JAVAÓïÑÔÒÔ½Ó¿Újava.util.IteratorµÄ·½Ê½Ö§³Öµü´ú×Óģʽ£¬Collection½Ó¿ÚÒªÇóÌṩiterator()·½·¨£¬´Ë·½·¨ÔÚµ÷ÓÃʱ·µ»¹Ò»¸öIteratorÀàÐ͵ĶÔÏó¡£¶ø×÷ΪCollection½Ó¿ÚµÄ×ÓÀàÐÍ£¬AbstractListÀàµÄÄÚ²¿³ÉÔ±ÀàItr±ãÊÇʵÏÖIterator½Ó¿ÚµÄÀà¡£

¡¡¡¡ItrÀàµÄÔ´´úÂëÈçÏÂËùʾ

[java]
private class Itr implements Iterator {
/**
* Index of element to be returned by subsequent call to next.
*/
int cursor = 0;

/**
* Index of element returned by most recent call to next or
* previous. Reset to -1 if this element is deleted by a call
* to remove.
*/
int lastRet = -1;

/**
* The modCount value that the iterator believes that the backing
* List should have. If this expectation is violated, the iterator
* has detected concurrent modification.
*/
int expectedModCount = modCount;

public boolean hasNext() {
return cursor != size();
}

public E next() {
checkForComodification();
try {
E next = get(cursor);
lastRet = cursor++;
return next;
} catch (IndexOutOfBoundsException e) {
checkForComodification();
throw new NoSuchElementException();
}
}

public void remove() {
if (lastRet == -1)
throw new IllegalStateException();
checkForComodification();

try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}

final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}
private class Itr implements Iterator {
/**
* Index of element to be returned by subsequent call to next.
*/
int cursor = 0;

/**
* Index of element returned by most recent call to next or
* previous. Reset to -1 if this element is deleted by a call
* to remove.
*/
int lastRet = -1;

/**
* The modCount value that the iterator believes that the backing
* List should have. If this expectation is vi