posts - 72, comments - 66, trackbacks - 0, articles - 0

          2009年12月23日


          sudo vim /etc/vmware/config

          在最下面添加一句話:
          xkeymap.nokeycodeMap = true

          posted @ 2010-06-09 15:39 Fingki.li 閱讀(592) | 評論 (0)編輯 收藏

          在使用Iterator處理Collection時,注意java.util.ConcurrentModificationException。
          1.如果你僅僅是對collection進(jìn)行遍歷查詢,那么不必?fù)?dān)心什么。
          2.但如果你在遍歷過程中要對collection進(jìn)行刪除,那么你就要注意了。
          For example:
          private void testDel() {  
          1.     List<String> list = new ArrayList<String>();  
          2.     for (int i = 0; i < 10; i++) {  
          3.         String str = "td" + i;  
          4.         list.add(str);  
          5.     }  
          6.   
          7.     for (Iterator it = list.iterator(); it.hasNext();) {  
          8.         String str = (String) it.next();  
          9.         if (str.equals("td5")) {  
          10.             // list.remove(str);  // 刪除方法一 
          11.             it.remove();  // 刪除方法二 
          12.         }  
          13.     }  

          上面的代碼運(yùn)行沒有問題,但如果你用“方法一”替代“方法二”,則會出現(xiàn)java.util.ConcurrentModificationException。
          (用for-each遍歷也會出個類似問題)
          具體原因是可以看一下先看看List中的remove方法源碼:
          1. public boolean remove(Object o) {  
          2.     if (o == null) {  
          3.         for (int index = 0; index < size; index++)  
          4.             if (elementData[index] == null) {  
          5.                 fastRemove(index);  
          6.                 return true;  
          7.             }  
          8.     } else {  
          9.         for (int index = 0; index < size; index++)  
          10.             if (o.equals(elementData[index])) {  
          11.                 fastRemove(index);  
          12.                 return true;  
          13.             }  
          14.     }  
          15.     return false;  
          16. }  
          17.   
          18. private void fastRemove(int index) {  
          19.     modCount++; // 特別注意這里,這里只增加了modCount的值  
          20.     int numMoved = size - index - 1;  
          21.     if (numMoved > 0)  
          22.         System.arraycopy(elementData, index + 1, elementData, index,  
          23.                 numMoved);  
          24.     elementData[--size] = null; // Let gc do its work  

          接著看。刪除后得到下一個元素的代碼,it.next():  it為AbstractList的內(nèi)部類Iterator的一個實例。
          1. public E next() {  
          2.     checkForComodification();  
          3.     try {  
          4.         E next = get(cursor);  
          5.         lastRet = cursor++;  
          6.         return next;  
          7.     } catch (IndexOutOfBoundsException e) {  
          8.         checkForComodification();  
          9.         throw new NoSuchElementException();  
          10.     }  
          11. }  
          12.   
          13. final void checkForComodification() {  //注意這個方法
          14.     if (modCount != expectedModCount)  //檢查這兩個值是否相同
          15.         throw new ConcurrentModificationException();  

          最后看Iterator的remove()方法的源代碼:
          1. public void remove() {  
          2.     if (lastRet == -1)  
          3.         throw new IllegalStateException();  
          4.     checkForComodification();  
          5.     try {  
          6.         AbstractList.this.remove(lastRet);  
          7.         if (lastRet < cursor)  
          8.             cursor--;  
          9.         lastRet = -1;  
          10.         expectedModCount = modCount; // 設(shè)置expectedModCount  
          11.     } catch (IndexOutOfBoundsException e) {  
          12.         throw new ConcurrentModificationException();  
          13.     }  
          14. }  
          15.   
          16. final void checkForComodification() {  
          17.     if (modCount != expectedModCount)  
          18.         throw new ConcurrentModificationException();  

          這下就明白了,list的remove方法只修改了modCount值,而iterator的remove能同步modCount和expectedModCount.



          posted @ 2010-03-02 12:22 Fingki.li 閱讀(5088) | 評論 (1)編輯 收藏

          Ubuntu 時區(qū)時間設(shè)置:
          執(zhí)行
          tzselect(有的版本用tzconfig)
          按照提示進(jìn)行選擇時區(qū)
          sudo cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime
          執(zhí)行
          sudo ntpdate cn.pool.ntp.org
          cn.pool.ntp.org是位于中國的公共NTP服務(wù)器,用來同步你的時間

          時間
          sudo date

          posted @ 2010-03-02 11:51 Fingki.li 閱讀(468) | 評論 (0)編輯 收藏

          各國語言代碼列表:
          English 1033 1033
          German 1031 1031
          French 1036 1036
          Japanese 1041 1041
          Danish 1030 1030
          Spanish 3082 3082
          Italian 1040 1040
          Dutch 1043 1043
          Norwegian 2068 2068
          Portuguese 2070 2070
          Finnish 1035 1035
          Swedish 1053 1053
          Czech 1029 1029
          Hungarian 1038 1038
          Polish 1045 1045
          Romanian 1048 1048
          Croatian 1050 1050
          Slovak 1051 1051
          Slovene 1060 1060
          Greek 1032 1032
          Bulgarian 1026 1026
          Russian 1049 1049
          Turkish 1055 1055
          British English 2057 1033
          Estonian 1061 1061
          Latvian 1062 1062
          Lithuanian 1063 1063
          Brazilian 1046 1046
          Traditional Chinese 1028 1028
          Korean 1042 1042
          Simplified Chinese 2052 2052
          Arabic 1025 1025
          Thai 1054 1054

          posted @ 2009-12-23 17:33 Fingki.li 閱讀(988) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 高邑县| 内江市| 铜陵市| 沂源县| 龙胜| 北宁市| 丹阳市| 中超| 英吉沙县| 玛曲县| 祥云县| 吉安市| 临海市| 长治县| 江北区| 平阴县| 屯门区| 徐州市| 东乌| 弋阳县| 丹巴县| 和林格尔县| 两当县| 九台市| 咸丰县| 达日县| 芜湖市| 竹山县| 平果县| 英德市| 楚雄市| 普定县| 施秉县| 合水县| 施甸县| 巴南区| 绍兴市| 五家渠市| 海门市| 错那县| 台前县|