鑑於樣的問題,我想你想要一個簡單的,僅循環和數組只有基礎的解決方案,以瞭解它是如何工作的。
你必須遍歷數組,保持新的插入點的索引。最後,使用相同的索引,你可以「縮小」數組(實際上覆制到一個新的更小的數組)。
String[] arr = {"a","b",null,"c",null,"d"};
// This will move all elements "up" when nulls are found
int p = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == null) continue;
arr[p] = arr[i];
p++;
}
// This will copy to a new smaller array
String[] newArr = new String[p];
System.arraycopy(arr,0,newArr,0,p);
剛剛測試過這段代碼。
編輯:
關於陣列收縮的可能性,而無需使用System.arraycopy,不幸的是在Java數組它們被實例化時的尺寸必須被聲明,並且之後不能被改變(也沒有取得較大也不小) 。
所以,如果你有長度爲6的數組,並找到2個空,你有沒有它縮小爲4的長度,如果沒有創建一個新的空數組,然後複製元素的方式。
列表可以擴展和收縮,並且更加得心應手。例如,與列表相同的代碼將是:
String[] arr = {"a","b",null,"c",null,"d"};
List<String> list = new ArrayList<>(Arrays.asList(arr));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) if (iter.next() == null) iter.remove();
System.out.println(list);
您好,感謝。雖然我想知道是否可以在for循環中使用system.arraycopy而不是使用system.arraycopy?除非你願意,否則你不需要執行代碼,但如果可能的話,你可以給我一個關於我應該怎麼做的快速概念? – user2775042 2014-09-06 14:34:23
編輯後解釋爲什麼你需要System.arraycopy如何,而不是列出的工作。 – 2014-09-06 14:41:50
感謝您的解釋 – user2775042 2014-09-06 14:46:46