無為

          無為則可為,無為則至深!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
          在Java中,數(shù)組不能動(dòng)態(tài)重設(shè)大小。一個(gè)可替代方法是使用java.util.ArrayList (或者java.util.Vector)代替使用原始數(shù)組(array)。另一種解決方案是用一個(gè)不同大小的數(shù)組重設(shè)數(shù)組,將舊數(shù)組內(nèi)容拷貝到新的數(shù)組。下面做了個(gè)演示程序?qū)崿F(xiàn)第二種方案,編寫了個(gè)通用函數(shù)rsizeArray (參數(shù))來實(shí)現(xiàn)此功能:

          /**
          * 使用一個(gè)新大小重設(shè)數(shù)組,并拷貝舊數(shù)組的內(nèi)容到新數(shù)組
          * @param oldArray 舊數(shù)組被重設(shè)
          * @param newSize 新數(shù)組大小
          * @return 返回帶同樣內(nèi)容的新數(shù)組
          */
          private static Object resizeArray (Object oldArray, int newSize){
          int oldSize = java.lang.reflect.Array.getLength(oldArray);
          Class elementType = oldArray.getClass().getComponentType();
          Object newArray = java.lang.reflect.Array.newInstance(
          elementType,newSize);
          int preserveLength = Math.min(oldSize,newSize);
          if (preserveLength > 0)
          System.arraycopy (oldArray,0,newArray,0,preserveLength);
          return newArray;
          }
          // resizeArray()測(cè)試用例
          public static void main (String[] args) {
          int[] a = {1,2,3};
          a = (int[])resizeArray(a,5);
          a[3] = 4;
          a[4] = 5;
          for (int i=0; i<a.length; i++)
          System.out.println (a[i]); }

          那二維數(shù)組如何重設(shè)大小呢? 很簡(jiǎn)單,就是處理數(shù)組的數(shù)組呀!

          要想重設(shè)二維數(shù)組,resizeArray方法必須處理外部數(shù)組和所有嵌套數(shù)組,如下例:

            int a[][] = new int[2][3];
          //...
          a = (int[][])resizeArray(a,20);
          // 新數(shù)組是[20][3]
          for (int i=0; i<a.length; i++) {
          if (a[i] == null)
          a[i] = new int[30];
          else a[i] = (int[])resizeArray(a[i],30);
          }
          // 新數(shù)組是[20][30]


          凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
          、轉(zhuǎn)載請(qǐng)注明來處和原文作者。非常感謝。

          posted on 2007-09-19 10:34 草兒 閱讀(2994) 評(píng)論(4)  編輯  收藏 所屬分類: java

          Feedback

          # re: Java中如何重設(shè)數(shù)組的大小? 2007-09-19 10:51 千里冰封
          呵呵,有創(chuàng)意  回復(fù)  更多評(píng)論
            

          # re: Java中如何重設(shè)數(shù)組的大小? 2007-09-19 11:29 Unmi
          多看看ArrayList的源代碼吧,顧名思意它是用數(shù)組來實(shí)現(xiàn)的List,看看它是如何實(shí)現(xiàn)數(shù)組拷貝的。  回復(fù)  更多評(píng)論
            

          # re: Java中如何重設(shè)數(shù)組的大小? 2007-09-19 11:48 dennis
          System.arraycopy  回復(fù)  更多評(píng)論
            

          # re: Java中如何重設(shè)數(shù)組的大小?[未登錄] 2007-09-20 13:09 ivan
          有新意~不過反射浪費(fèi)資源吧~  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 阿拉善左旗| 承德县| 三门峡市| 藁城市| 友谊县| 金塔县| 弥渡县| 阿拉尔市| 四川省| 江达县| 大名县| 南丰县| 石城县| 长岛县| 三门峡市| 五莲县| 莱州市| 西乌珠穆沁旗| 连江县| 舒城县| 海阳市| 曲阳县| 西充县| 嘉祥县| 吐鲁番市| 镇远县| 长葛市| 澜沧| 绿春县| 尚志市| 上思县| 如东县| 萨迦县| 清苑县| 富民县| 横山县| 朔州市| 栾城县| 云和县| 克东县| 虹口区|