2012-03-05 153 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會更慢(如果有的話)的想法?

相關問題