不使用List <object>创建空数组

时间:2015-11-18 15:08:46

标签: java arraylist

如果我想创建一个&#34;无限制&#34;数组我知道我可以使用一个列表(关于这个和其他论坛有很多信息)

但是,如果我不想制作清单怎么办?还有另外一种方法吗? 因为我想在另一个函数中使用float数组,在这种情况下使用列表会很麻烦。

这是我到目前为止用列表

写的
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 ;

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

感谢您阅读=)

3 个答案:

答案 0 :(得分:0)

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

  1. 您可以使用list.ToArray()

  2. 将列表转换为数组
  3. 每次向数组添加元素时,都可以通过更改数组的大小来动态调整数组大小。以下是您将如何做到这一点:

    //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];
    }
    
  4. 希望这会有所帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

java中的数组是固定大小的,所以你的第二段代码永远不会起作用。

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

因此,需要在第一个代码块中以List<Float>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;
}

(此方法可以改进,因为LinkedList get是线性的{{1}}表现不佳。

令人讨厌的是,对于8种基本类型,你需要8种这样的方法,而在另一种方向上需要8种方法来进行转换。目前的情况是,没有办法在基本类型上编写通用代码,因此像这样的代码重复很常见。