Answers:
Java中数组的长度是不可变的。因此,您需要将所需的部分复制为新数组。
使用java.util.Arrays类中的copyOfRange
方法:
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex是要复制的范围的初始索引,包括端点。
endIndex是要复制的范围的最终索引(不包括)。(此索引可能位于数组之外)
例如:
//index 0 1 2 3 4
int[] arr = {10, 20, 30, 40, 50};
Arrays.copyOfRange(arr, 0, 2); // returns {10, 20}
Arrays.copyOfRange(arr, 1, 4); // returns {20, 30, 40}
Arrays.copyOfRange(arr, 2, arr.length); // returns {30, 40, 50} (length = 5)
endIndex
大于作为第一个参数传递的数组的大小。因此,如果要完整副本,请创建一个引用此数组的变量,然后使用Arrays.copyOfRange(var, 0, var.length)
或Arrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
。
是的,您可以使用Arrays.copyOfRange
它做同样的事情(请注意有一个副本:您无需更改初始数组)。
List
和subList
。
你可以试试:
System.arraycopy(sourceArray, 0, targetArray, 0, targetArray.length);// copies whole array
// copies elements 1 and 2 from sourceArray to targetArray
System.arraycopy(sourceArray, 1, targetArray, 0, 2);
如果您使用的是Java 1.6或更高版本,则可以Arrays.copyOfRange
用来复制数组的一部分。从javadoc:
将指定数组的指定范围复制到新数组中。范围(从)的初始索引必须介于零和之间
original.length
(含)。处的值original[from]
放置在副本的初始元素中(除非from == original.length
或from == to
)。来自原始数组中后续元素的值将放入副本中的后续元素中。范围(to
)的最终索引(必须大于或等于from
)可以大于original.length
,在这种情况下,该最终索引false
将放置在副本中所有索引大于或等于的元素中original.length - from
。返回数组的长度为to - from
。
这是一个简单的例子:
/**
* @Program that Copies the specified range of the specified array into a new
* array.
* CopyofRange8Array.java
* Author:-RoseIndia Team
* Date:-15-May-2008
*/
import java.util.*;
public class CopyofRange8Array {
public static void main(String[] args) {
//creating a short array
Object T[]={"Rose","India","Net","Limited","Rohini"};
// //Copies the specified short array upto specified range,
Object T1[] = Arrays.copyOfRange(T, 1,5);
for (int i = 0; i < T1.length; i++)
//Displaying the Copied short array upto specified range
System.out.println(T1[i]);
}
}
签出copyOfRange ; 和示例:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
您可以使用如下形式: Arrays#copyOfRange
您可以subList(int fromIndex, int toIndex)
对整数arr 使用method,如下所示:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>();
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
List<Integer> partialArr = arr.subList(1, 3);
// print the subArr
for (Integer i: partialArr)
System.out.println(i + " ");
}
}
输出将是:2 3
。
请注意,该subList(int fromIndex, int toIndex)
方法在它收到的第二个变量(var2-1)上执行负1,我不知道确切的原因,但是那是发生了什么,也许是为了减少超过数组大小的机会。
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
因为我不想使用Integer.MAX_VALUE而不是255,以防万一我不想获得真实长度