[英]How can I make a dynamic array in Java?
我們的作業快速概覽:用戶需要輸入收到的成績。 我們不知道用戶需要輸入多少個等級。 如果用戶輸入“ -1”,則表示我們已經完成輸入成績。
問題是如何使用計數器並在同一循環中將值分配給數組? 我寧願不必要求用戶兩次輸入所有值(一次獲得數組大小,第二次為索引位置分配等級)。
我們的教授給了我們一份講義,告訴我們基本上可以猜測數組的大小並希望達到最佳效果。 我拒絕相信這是唯一的解決方案。
任何幫助,將不勝感激。 謝謝。
您不能在Java中創建動態數組。
為此,您將必須使用List
或ArrayList
。
我們將必須在應用程序運行之前或在編碼時提供數組的大小,而arrayList為我們提供了在需要時添加數據的便利,因此添加數據時它的大小會自動增加。
范例:
import java.util.*;
public class ArrayListDemo {
public static void main(String args[]) {
// create an array list
ArrayList al = new ArrayList();
System.out.println("Initial size of al: " + al.size());
// add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
al.add(1, "A2");
System.out.println("Size of al after additions: " + al.size());
// display the array list
System.out.println("Contents of al: " + al);
// Remove elements from the array list
al.remove("F");
al.remove(2);
System.out.println("Size of al after deletions: " + al.size());
System.out.println("Contents of al: " + al);
}
}
這個例子是從這里開始的。
更新:
當您將列表定義為:
List myList = new ArrayList();
您只能調用屬於List類的方法和引用成員。 如果將其定義為:
ArrayList myList = new ArrayList();
除了從List繼承的成員之外,您還可以調用ArrayList特定的方法並使用ArrayList特定的成員。
列表不是類,而是接口。 它沒有實現任何方法。 因此,如果您在List引用上調用方法,則實際上在兩種情況下都將調用ArrayList的方法。
使用某種List
是一個更好的選擇,因為它基本上可以完成您想要的(可以增長和收縮),實際上, ArrayList
就是一個動態數組。
如果不能使用System.arraycopy
的List
則可以自己滾動
例如,這將增加或縮小數組以匹配您提供的大小。
public String[] updateArray(String[] src, int size) {
String[] dest = new String[size];
if (size > src.length) {
System.arraycopy(src, 0, dest, 0, src.length);
} else {
System.arraycopy(src, 0, dest, 0, size);
}
return dest;
}
再次... List
更容易...
構建動態數組涉及以下基本步驟:
-創建固定容量的數組。
-當數組的大小(添加的元素數)接近容量時,創建一個新的數組(通常將容量增加一倍),然后將所有舊元素復制到新數組中。
鏈表對於構建陣列(完成時間為O(1))最有效。 但是,訪問用於在鏈表中插入和刪除的元素的效率不高(O(n)時間)。 想象一下,必須遍歷整個列表才能到達最后一個元素。 構建動態數組的效率較低,因為需要隨着數組的增長調整其大小。 插入和刪除元素的效率較低,因為需要在此之后移動所有元素以騰出空間或填補空白。 但是,訪問數組中的元素效率很高(O(1)時間),在排序時有很大的優勢。
Java ArrayList是動態數組的實現。 您也可以實現自己的。
如果您根本無法使用ArrayList或任何類型的動態列表,那么一個解決方案是:
StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(System.in);
int j;
while((j=scanner.nextInt()) !=-1){
sb.append(j + " ");
}
String []numbers = sb.toString().split(" ");
int[] grades = new int[numbers.length];
for(int i=0;i<numbers.length;i++){
grades[i] = Integer.parseInt(numbers[i]);
}
如您所見,我將輸入放入stringbuilder對象中,然后將其解析為字符串數組,然后將該數組轉換為整數數組。 我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.