如何在没有长度的java中创建数组?

时间:2012-03-05 13:14:43

标签: java

我正在制作一个算法来保存0 1数组之间的零路径 路径的长度是可变的,所以我需要一个没有预定义长度的数组

10 个答案:

答案 0 :(得分:6)

如果不指定长度,则无法使用数组。请考虑使用ArrayList代替。

答案 1 :(得分:6)

你可以使用一个长度在0到20亿之间的ArrayList。

如果使用值或0和1,则BitSet可能更有效。

答案 2 :(得分:1)

请改用ArrayList。一个普通的数组不能轻易调整大小 - 你必须创建一个更大的新数组并将旧的数据复制到其中 - 我会推荐它。

答案 3 :(得分:1)

ArrayList al = new ArrayList();
al.add(0);
al.add(1);

答案 4 :(得分:1)

您始终可以动态创建数组,例如new int[n]其中n包含此时的数组长度(未在编译时预定义)。

但是数组大小无法更改。如果您需要,请使用List代替: List<Integer> list = new ArrayList<Integer>();

现在您可以在需要时添加和删除元素,并且动态更改列表大小:您不必关心它:

list.add(123);
list.remove(456);

答案 5 :(得分:1)

您可以使用:

ArrayList<Integer> al = new ArrayList<Integer>(); 

注意,如果您想对此数组进行排序(例如按升序排序) - 您将 NOT 使用

Arrays.Sort(al);

使用:

Collections.Sort(al);

答案 6 :(得分:0)

使用ArrayList获取动态尺寸。

答案 7 :(得分:0)

您可以使用ArrayList<Boolean>ArrayList<Integer>,只需使用add方法即可。然后在完成构造路径时使用实用程序方法获取数组。

答案 8 :(得分:0)

String myArray [] = new Sting [YourVariable];

答案 9 :(得分:0)

如果速度是一个真正的问题......并且你需要一个动态变化的数组,你可以尝试以下方法:

// this only works for increasing array-size
int[] tmp = new int[new_bigger_size]; // create a new array 
System.arraycopy(array, 0, tmp, 0, array.length); // copy the data
int nextPosition = array.length
array = tmp; // assign the reference

// from position array.length (nextPosition), the new elements can be copied, 
// for example:
array[nextPosition] = 120;
....

请注意!这非常C-ish并不理想。在调整大小期间维持使用更多内存也更加困难,并且被视为不良形式。只考虑这个作为最后的手段,如果一个ArrayList在速度方面真的不适合你。

话虽如此,有人知道ArrayList会慢多少(如果有的话)吗?