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 閱讀(600) | 評論 (0)編輯 收藏

          在使用Iterator處理Collection時,注意java.util.ConcurrentModificationException。
          1.如果你僅僅是對collection進行遍歷查詢,那么不必擔心什么。
          2.但如果你在遍歷過程中要對collection進行刪除,那么你就要注意了。
          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.     }  

          上面的代碼運行沒有問題,但如果你用“方法一”替代“方法二”,則會出現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的內部類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; // 設置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 閱讀(5112) | 評論 (1)編輯 收藏

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

          時間
          sudo date

          posted @ 2010-03-02 11:51 Fingki.li 閱讀(475) | 評論 (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 閱讀(994) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 阳高县| 玉溪市| 三原县| 晴隆县| 金塔县| 大丰市| 鄂托克旗| 济宁市| 乌审旗| 新余市| 宜城市| 叙永县| 波密县| 循化| 五莲县| 昭觉县| 八宿县| 阿勒泰市| 康保县| 五台县| 甘泉县| 高要市| 巴中市| 连江县| 喀喇| 成都市| 慈利县| 林州市| 怀柔区| 兴业县| 永州市| 临漳县| 余庆县| 三河市| 广丰县| 柏乡县| 康平县| 凌源市| 犍为县| 自贡市| 平昌县|