2012-05-02 33 views
8

Có phương pháp nào sẽ sao chép một phần của mảng (không phải mảng danh sách) và tạo một mảng mới từ mảng đó không?Phần bản sao Java của mảng

Example: 
[1,2,3,4,5] 

và bạn tạo một mảng mới từ nó:

[1,2,3] 

Có bất kỳ một dòng/phương pháp đó sẽ làm điều này?

+0

có thể trùng lặp của [có được chỉ là một phần của một mảng trong Java?] (http://stackoverflow.com/questions/11001720/get-only-part-of-an-array-in-java) – 32cupo

Trả lời

13

Dưới đây là một java 1.4 tương thích 1,5-liner:

int[] array = { 1, 2, 3, 4, 5 }; 
int size = 3; 

int[] part = new int[size]; 
System.arraycopy(array, 0, part, 0, size); 

Bạn có thể làm điều này trong một dòng, nhưng bạn sẽ không có một tham chiếu đến kết quả.

Để thực hiện một one-liner, bạn có thể cấu trúc lại này thành một phương pháp:

private static int[] partArray(int[] array, int size) { 
    int[] part = new int[size]; 
    System.arraycopy(array, 0, part, 0, size); 
    return part; 
} 

sau đó gọi như thế này:

int[] part = partArray(array, 3); 
5
int [] myArray = [1,2,3,4,5]; 

int [] holder = new int[size]; 

System.arraycopy(myArray,0,holder,size); 

trong đó 0 là viết tắt của chỉ mục mảng nguồn nơi bắt đầu sao chép. và

là viết tắt của số lượng hoạt động sao chép. Rằng bạn có thể thay đổi theo nhu cầu của bạn.

copyOfRange của Mảng là có và nhiều cách khác mà điều này có thể được thực hiện

+2

+1 cho nhận xét của bạn. – Lion

+1

Bạn đang thiếu một đối số cho nó đòi hỏi một int cho destinationPosition. –

5

Có một phương pháp tồn tại trước đó trong java.util.Arrays: newArray = Arrays.copyOfRange(myArray, startindex, endindex). Hoặc bạn có thể dễ dàng viết phương pháp riêng của bạn:

public static array[] copyOfRange(array[] myarray, int from, int to) { 
    array[] newarray = new array[to - from]; 
    for (int i = 0 ; i < to - from ; i++) newarray[i] = myarray[i + from]; 
    return newarray; 
} 
1

Như những người khác đã nói, bạn có thể sử dụng phương pháp Arrays.copyOfRange . Một ví dụ là:

String[] main = {"one", "two", "three", "four", "five"}; 
int from = 2; 
int to = 4; 
String[] part = Arrays.copyOfRange(main, from, to); 

Bây giờ phần sẽ là: { "hai", "ba", "tứ đại gia"}

Các vấn đề liên quan