2015-02-11 53 views
0

我有一個數組處理程序的實現它需要一個數組並添加一個新的數組值。如何創建通用陣列

此刻我有它爲長型工作。

我希望它適用於任何類型,如果可能的話。

當前實現:

public class ArrayHandler 
{ 
    public static long[] add(long[] arr, long value) 
    { 
     long[] newarr = new long[arr.length+1]; 
     if(arr.length == 0) 
     { 
      newarr[0] = value; 
     } 
     else 
     { 
      for(int i = 0 ; i < arr.length ; i++) 
      { 
       newarr[i] = arr[i]; 
      } 
     } 
     newarr[arr.length] = value; 
     return newarr; 
    } 
} 
+0

對於原始類型,您不能,您需要複製/粘貼。 – 2015-02-11 23:24:34

+0

你是什麼意思閱讀教程? @KickButtowski 有沒有你推薦的教程,因爲我試圖尋找到處可能,並沒有什麼是 – Moe 2015-02-11 23:24:43

+0

谷歌泛型Java教程。 – 2015-02-11 23:25:47

回答

0

我希望這個「變通方法」是配不上你:

public class Test { 

    public static void main(String[] args) { 
     Long theLong = new Long(1234); 
     Integer theInteger = new Integer(421); 

     Number[] myArray = null; 

     myArray = add(myArray, theLong); 
     myArray = add(myArray, theInteger); 
     System.out.println(myArray[0]); 
     System.out.println(myArray[1]); 
    } 

    public static Number[] add(Number[] arr, Number value) { 
     Number[] newarr = null; 
     if (arr == null || arr.length == 0) { 
      newarr = new Number[1]; 
      newarr[0] = value; 
     } else { 
      for (int i = 0; i < arr.length; i++) { 
       newarr = new Number[arr.length + 1]; 
       newarr[i] = arr[i]; 
      } 
      newarr[arr.length] = value; 
     } 
     return newarr; 
    } 

} 
+0

問題在於它引入了類型裝箱,與原始類型相比,性能下降。 – Lesleh 2015-02-12 03:15:53

+0

還有其他問題......如果性能真的是一個需要考慮的問題,那麼可能應該對這個數組處理程序進行檢查和重寫。 有一些空間來改善代碼。我只是想方設法讓這個人處理他/她想要的任何事情。 – vianna77 2015-02-12 03:22:43

0

您可以爲所有類型的使用反射陣列的工作的一個方法,但您將不得不失去類型安全性(基本陣列類型和參考陣列類型的唯一超類型爲Object):

import java.lang.reflect.Array; 
public class ArrayHandler 
{ 
    public static Object add(Object arr, Object value) 
    { 
     Object newarr = Array.newInstance(arr.getClass().getComponentType(), 
              Array.getLength(arr)+1); 
     System.arraycopy(arr, 0, newarr, 0, Array.getLength(arr)); 
     Array.set(newarr, Array.getLength(arr), value); 
     return newarr; 
    } 
}