簡體   English   中英

如何在Java中創建動態數組?

[英]How can I make a dynamic array in Java?

我們的作業快速概覽:用戶需要輸入收到的成績。 我們不知道用戶需要輸入多少個等級。 如果用戶輸入“ -1”,則表示我們已經完成輸入成績。

問題是如何使用計數器並在同一循環中將值分配給數組? 我寧願不必要求用戶兩次輸入所有值(一次獲得數組大小,第二次為索引位置分配等級)。

我們的教授給了我們一份講義,告訴我們基本上可以猜測數組的大小並希望達到最佳效果。 我拒絕相信這是唯一的解決方案。

任何幫助,將不勝感激。 謝謝。

您不能在Java中創建動態數組。

為此,您將必須使用ListArrayList

我們將必須在應用程序運行之前或在編碼時提供數組的大小,而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.arraycopyList則可以自己滾動

例如,這將增加或縮小數組以匹配您提供的大小。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM