我有一个 Java 列表,我需要获取它的子列表。我试图避免创建一个新列表并填充它,是否可以创建一个位于内存中同一点的列表,只是更短?
double[] list1 = {1, 2, 3, 4};
// later:
double[] list2 = list1[0:2] //?
在上面的示例中,我希望
list2
成为 0 到 2 的子列表 ({1, 2}
)。
这可能吗?或者我应该改用 ArrayLists sublist
方法?我正在努力避免这种情况。
我试图避免使用 ArrayList,因为我使用的库需要参数为
double[]
列表。
在Java中,数组不像其他一些数据结构那样直接支持子列表的概念,并且您无法创建对数组中特定范围的元素的视图或引用。如果您想使用类似子列表的结构,您可能必须使用
ArrayList
或类似的类。
如果您仅限于使用
double[]
并且希望避免显式创建新数组,则可以通过操作索引来实现类似的效果。下面是从现有数组创建“子列表”的示例方法:
public class Main {
public static void main(String[] args) {
double[] list1 = {1, 2, 3, 4};
// Get a sublist-like array
double[] list2 = subArray(list1, 0, 2);
// Print the result
for (double value : list2) {
System.out.println(value);
}
}
// Method to create a sublist-like array
private static double[] subArray(double[] array, int startIndex, int endIndex) {
int length = endIndex - startIndex + 1;
double[] result = new double[length];
for (int i = 0; i < length; i++) {
result[i] = array[startIndex + i];
}
return result;
}
}
此方法使用原始数组 (
result
) 中指定范围的元素创建一个新数组 (array
)。请记住,这不如使用 ArrayList
的 subList
方法高效,特别是当您需要对子列表执行多个操作时。