Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建空数组而不使用List_Java_Arraylist - Fatal编程技术网

Java 创建空数组而不使用List

Java 创建空数组而不使用List,java,arraylist,Java,Arraylist,如果我想创建一个无限数组,我知道我可以使用一个列表,在这个论坛和其他论坛上有很多信息 但是如果我不想列一个清单呢?还有别的办法吗? 因为我想在另一个函数中使用浮点数组,在这种情况下使用列表有点麻烦 这就是我到目前为止写的清单 List<Float> listfloat = new ArrayList(); listfloat.add((float)0.1); //example listfloat.add((float)1.2); float data[]= new float[l

如果我想创建一个无限数组,我知道我可以使用一个列表,在这个论坛和其他论坛上有很多信息

但是如果我不想列一个清单呢?还有别的办法吗? 因为我想在另一个函数中使用浮点数组,在这种情况下使用列表有点麻烦

这就是我到目前为止写的清单

List<Float> listfloat = new ArrayList();
listfloat.add((float)0.1); //example
listfloat.add((float)1.2);

float data[]= new float[listfloat.size()];

for(int i = 0; i < listfloat.size(); ++i)
{
    data[i] = listfloat.get(i);
}

return data ;
但我更喜欢这样的

float data[]; //unknown size

for(i=0 ; i< sizeiwant; i++)
{
    data[i] = mydata;
}

return data ;
我知道它会起作用的!我只是想优化我的编码=


感谢阅读=

有两种方法可以做到这一点:

可以使用list.ToArray将列表转换为数组

通过每次向数组中添加元素时更改数组的大小,可以动态调整数组的大小。以下是您将如何做到这一点:

//initialize array of size 10.
int[] array=new int[10];
//make copy of array
int[] arrayCopy=array.clone();
//expand array size by 1
array=new int[array.length+1];
//give value to new array index
array[array.length-1]=0;
//copy values from 'arrayCopy' to array
for(int x=0;x<arrayCopy.length;x++){
array[x]=arrayCopy[x];
}

希望这能有所帮助。

根据您提供的信息,我建议您使用一个数组,创建一个在数组已满时调用的方法,并返回一个具有更多空间的原始数组的副本。这样,您可以模拟动态大小分配

java中的数组是固定大小的,因此您的第二段代码永远不会工作

如果需要可以调整大小的数据类型,则应使用ArrayList。另一方面,有时像float[]这样使用基元数组会更快、更方便

因此,在第一个代码块中转换List和float[]的方式非常常见,除非使用外部库,否则无法在一行中转换

我建议编写一个实用方法来进行转换

public static float[] listToArray(List<Float> list) {
    int size = list.size();
    float[] temp = new float[size];
    for (int i = 0; i < size; i++)
        temp[i] = list.get(i);
    return temp;
}
这种方法可以改进,因为对于get是线性的LinkedList,它的性能很差


令人烦恼的是,对于8个基元类型,您需要8个这样的方法,而在另一个方向上进行转换则需要8个方法。就目前情况而言,无法在基本类型上编写泛型代码,因此像这样的代码复制很常见。

什么是无限数组?。你的意思是一个动态大小的数组吗?你总是可以使用list.toArra将列表转换为数组,并且如何根据你的标题将unlimited转换为空?您的问题目前还不清楚。Optimize=ArrayList。它是动态的,快速的。int[]a=新的int[Integer.MAX_值];这里真正的问题是,列表如何比数组更麻烦,尤其是当您可以将列表更改为数组时。Java很好地避开了数组,因为数组速度慢,很难迭代,很难从中删除元素,而且当您遇到问题时,它甚至不应该是动态的。这不是PHP:PI认为这不是最好的解决方案。即使编写起来很容易,但如果数组很大,运行起来也需要很长时间。我的阵型会很大。但这不是个坏主意!还清单似乎是一条路要走。特别是考虑到将列表转换回数组以及将列表转换回数组非常简单,您可以使用数组;我有代码可以很好地处理列表。我只是想知道你是否必须使用列表。显然没有,但它很容易使用,那么为什么要使用其他东西呢?@Annaïck如果您事先不知道需要多少个浮点,答案是您必须使用一个列表。@Annaïck还注意到List.toArray不返回基元数组。如果使用另一个重载,则返回对象[]或T[]。float[]比Object[]或ArrayList更快、更轻,因为这些值没有装箱。