2017-05-11 146 views
1

書寫方法在[位置]變量中存儲的位置將[]插入到數字[]中。將數組插入另一個數組

public boolean insertArray(int location, double a[]) 
    {  
     if (length != MAX_CAPACITY) 
     { 
      numbers[location] = a[]; 
      length++; 
      return true; 
     } 
     return false; 
    } 

是否可以通過數組?

+1

「數字」的類型是什麼? – shmosel

+0

使用循環。你可以使用'arraycopy',但我想這只是練習目的。 – Yoda

+0

當我們不知道問題的參數時,怎麼會有這麼多的答案? – shmosel

回答

4

您可以使用System.arraycopy

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 

下面是一個簡單的例子,你可以按照解決您的問題:

double a[] = {1, 2, 3, 4, 5}; 
double b[] = {6, 7, 8}; 
int local = 5; 
double result[] = new double[a.length + b.length]; 

System.arraycopy(a, 0, result, 0, a.length); 
System.arraycopy(b, 0, result, local, b.length); 
System.out.println(Arrays.toString(result)); 

輸出

[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0] 
+0

這隻將一個數組的內容複製到另一個(合併)...我相信問題是如何將一個數組(即對數組的引用)插入到另一個數組的特定位置(即兩維數組) –

+0

@CarlitosWay所以你做出了反對票?你可以用'System.arraycopy'來做很多事情來檢查我的例子 –

1

是否存在使用數組而不是列表的特定原因,如 作爲ArrayList?

如果您使用java.util.List,則使用​​。

如果您使用的是數組,那麼您需要執行數組分配和自我複製。下面是ArrayList.addAll(int, Collection)從OpenJDK的一個example implementation

// Copyright 1997-2007 Sun Microsystems, Inc. 
public boolean addAll(int index, Collection<? extends E> c) { 
    rangeCheckForAdd(index); 

    Object[] a = c.toArray(); 
    int numNew = a.length; 
    ensureCapacity(size + numNew); // Increments modCount 

    int numMoved = size - index; 
    if (numMoved > 0) 
     System.arraycopy(elementData, index, elementData, index + numNew, 
         numMoved); 

    System.arraycopy(a, 0, elementData, index, numNew); 
    size += numNew; 
    return numNew != 0; 
} 
1

您可以利用陣列了。

int[] numbers = ... 
int[] a = ... 

int n = numbers.length; 
numbers = Arrays.copyOf(numbers, numbers.length + a.length); 
System.arraycopy(a, 0, numbers, n, a.length); 

一般而言,List和ArrayList是更好的抽象,效率幾乎相同。

1

是的,你可以。

但是陣列必須是二維Array!例如:

public static double[][] numbers = new double[MAX_CAPACITY][]; 

public boolean insertArray(int location, double[] a) 
{  
    if (length != MAX_CAPACITY) 
    { 
     numbers[location] = a; 
     length++; 
     return true; 
    } 
    return false; 
}