我正在制作一个算法来保存0 1数组之间的零路径 路径的长度是可变的,所以我需要一个没有预定义长度的数组
答案 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会慢多少(如果有的话)吗?