我必须在java中找到动态数组。我知道我可以使用 ArrayList 或列表,但我现在无法使用它们,我真的很努力找到这个,但我找不到如何使用非静态(动态)数组没有收藏,谢谢
答案 0 :(得分:6)
数组在Java中具有固定长度。没有办法解决这个问题。
如果您想将N
:th元素添加到数组,arr
长度为N-1
,那么您必须
在代码中,这些步骤对应于
int[] newArr = new int[N];
System.arraycopy(arr, 0, newArr, 0, arr.length);
arr = newArr;
或者,使用Java 6中的Arrays.copyOf
稍微缩短:
int[] newArr = Arrays.copyOf(arr, N);
arr = newArr;
答案 1 :(得分:1)
Java中的普通数组不是动态的,因此当您想要更改数组的大小时,需要创建一个新数组并将前一个数据的内容复制到其中。
您可以使用Arrays#copyOf
方法以简单的方式创建和复制它:
int[] myNewIntArray = Arrays.copyOf(oldIntArray, newArraySize);
答案 2 :(得分:1)
您可以实现自己的动态数组。创建一个大小为1的数组(如果提供了初始大小,则为n),然后将大小加倍并在现有元素达到容量后复制它们。
这将使每次操作的摊销成本为3,n元素为3n,这意味着你可以在o(n)时间内保持这个成本。
一个非常简单的天真实现(对于int数组)将是:
class DynamicIntArray
{
private int capacity;
private int[] array;
private int size = 0;
public DynamicIntArray()
{
this(1);
}
public DynamicIntArray(int capacity)
{
this.capacity = capacity;
array = new int[this.capacity];
}
public void add(int a)
{
if (size == capacity)
resize();
array[size] = a;
size++;
}
private void resize()
{
capacity *= 2;
array = Arrays.copyOf(array, capacity);
}
// Implement the rest
}
以下是您将如何使用它:
DynamicIntArray dynamicArray = new DynamicIntArray();
dynamicArray.add(1);
dynamicArray.add(2);
dynamicArray.add(3);
如果将其更改为使用泛型,则可以将其用于任何内容,而不仅仅是整数。
答案 3 :(得分:0)
你只需像这样分配它们:
int[] array = new int[17];
答案 4 :(得分:0)
您可以使用Collection直到需要类型数组,然后使用Collection.toArray()函数获取数组。
答案 5 :(得分:0)
您可以通过在接近完整时创建新数组来模仿动态行为,例如,创建一个长度是原始数组长度两倍的新数组,并复制所有元素。
答案 6 :(得分:0)
如果你解释一下你想要做什么以及为什么你不能/不会用户收藏,我想你会得到更好的答案。你想要解决的问题究竟是什么?