2012-03-05 193 views
1

我提出的算法,以节省0 1阵列 之间零的路径的路径的长度是可变的,所以我需要在不预定长度如何在java中创建一个没有长度的数组?

+1

使用[Java collections](http://docs.oracle.com/javase/tutorial/collections/),[List](http://docs.oracle.com/javase/7/docs/api/java/UTIL /列表。html)for one – 2012-03-05 13:16:41

+0

动态初始化数组大小是没有办法的。你为什么不使用集合? – 2012-03-05 13:17:30

+0

你的意思是说,一旦数组被创建,它的大小就不会变化;或者每次创建数组时,它必须是不同的(即变量)大小? – apollodude217 2012-03-05 13:30:08

回答

1

您可以使用:

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

注意,如果你想解决这阵列(例如以上升顺序) - 你会使用

Arrays.Sort(al); 

使用:

Collections.Sort(al); 
6

不能使用阵列的阵列,而不指定其长度。考虑改用ArrayList

1

改为使用ArrayList。一个普通的数组不能被如此轻松地调整大小 - 你将不得不创建一个更大的新的大小,并将其复制到它 - 我会不是推荐这个。

6

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

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

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

可以使用ArrayList<Boolean>ArrayList<Integer>,只是使用add方法。然后利用实用方法在完成路径构建时获取数组。

1

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

但是数组大小不能改变。如果你需要这个你应该使用List代替: List<Integer> list = new ArrayList<Integer>();

现在你可以添加,当你需要与列表大小将动态更改删除元素:你不必在意它:

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

String myArray [] =新Sting [YourVariable];

0

如果spee d是一个真正的问题......并且您需要一个动态变化的阵列,您可以尝试以下操作:

// 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会更慢(如果有的话)的想法?

相关问题