如果我想创建一个"无限制"数组我知道我可以使用一个列表(关于这个和其他论坛有很多信息)
但是,如果我不想制作清单怎么办?还有另外一种方法吗? 因为我想在另一个函数中使用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 ;
我知道它会起作用!我只是想优化我的编码=)
感谢您阅读=)
答案 0 :(得分:0)
有两种方法可以做到这一点:
您可以使用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];
}
希望这会有所帮助。
答案 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种方法来进行转换。目前的情况是,没有办法在基本类型上编写通用代码,因此像这样的代码重复很常见。