[英]Java Dynamic arrays
我正在學習Java編程課程,並且需要有關動態數組的幫助。 我環顧四周,找不到解決方法,這只是我的簡單程度。 我上課不遠,只是學習了基礎知識,所以我不太了解,但是我需要知道如何制作動態數組。
這是我們獲得的兩個示例程序:
public class DynamicArrayOfInt
{
private int[] data;
public DynamicArrayOfInt()
{
data = new int[1];
}
public int get(int position)
{
if (position >= data.length)
return 0;
else
return data[position];
}
public void put(int position, int value)
{
if (position >= data.length)
{
int newSize = 2 * data.length;
if (position >= newSize)
newSize = 2 * position;
int[] newData = new int[newSize];
System.arraycopy(data, 0, newData, data.length);
data = newData;
System.out.println("Size of dynamic array increased to " + newSize);
}
data[position] = value;
}
}
`
2號
import java.util.Scanner;
public class ReverseWithDynamicArray
{
public static void main(Sting[] args)
{
DyanamicArrayOfInt numbers;
int numCt;
int num;
Scanner scan = new Scanner(System.in);
numbers = new DynamicArrayOfInt();
numCt = 0;
System.out.println("Enter some postive integers; Enter 0 to end");
while (true)
{
num = scan.nextInt();
if (num <= 0)
break;
numbers.put(numCt, num);
numCt++;
}
System.out.println("\nYour numbers in reverse order are:\n");
for (int i = numCt - 1; i >= 0; i--)
{
System.out.println( numbers.get(i) );
}
}
}
第二個應該繼承第一個,並允許您在鍵入它們后創建更多的數組。但是當我使用它們時,它說我有一個錯誤,並且說只有當顯式請求注釋處理時,類名稱ReverseWithDynamicArray
才被接受。
將此用於您的第一個示例程序,我在System.arraycopy處更改了參數
public class DynamicArrayOfInt
{
private int[] data;
public DynamicArrayOfInt()
{
data = new int[1];
}
public int get(int position)
{
if (position >= data.length)
return 0;
else
return data[position];
}
public void put(int position, int value)
{
if (position >= data.length)
{
int newSize = 2 * data.length;
if (position >= newSize)
newSize = 2 * position;
int[] newData = new int[newSize];
System.arraycopy(data, 0, newData, 0, data.length);
data = newData;
System.out.println("Size of dynamic array increased to " + newSize);
}
data[position] = value;
}
}
為什么不嘗試收藏? 我認為LinkedList最適合它。 盡管我對您的要求不是很確定。 我正在嘗試將一些示例代碼放在這里:
//create a LinkedList object :
LinkedList ll=new LinkedList();
//Add your items in linked list as many as you like
ll.add("item");// you can also add on a specific position by using ll.add(index, item);
//for getting the length of your LinkedList use:
int size=ll.size();
//for reversing the list items use :
Collections.reverse(list);//or you can manually implement it by using size or length of list
/* for printing the list, simply put it in Sop
(As toString method is overriden in Collection Framework to give a output string in
the form like: [collection items separated with comma] ) */
///注意:ArrayList和Linkedlist之間的區別在於ArrayList實現RandomAccess接口,因此它為訪問任何隨機索引提供了恆定的訪問時間。 因此,最好使用ArrayList進行檢索,但不宜將其插入隨機位置,因為ArrayList需要調整ArrayList的大小和若干移位操作。
LinkedList實現為具有雙鏈表的節點形式的順序訪問。 要訪問任何隨機索引,將需要訪問到該節點的下一個地址。 因此,對於隨機檢索/讀取,LinkedList不適合。 但是要在隨機索引上插入,只需要維護一個要插入的新節點即可。 因此,適合在列表之間或列表中任何位置插入LinkedList。
希望對您有幫助。
您在System.arraycopy()中缺少一個參數,以下是java.lang.System.arraycopy()方法的聲明
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src-這是源數組。
srcPos-這是源數組中的起始位置。
dest-這是目標數組。
destPos-這是目標數據中的起始位置。
length-這是要復制的數組元素的數量。
看看Java中collection的原始實現。 有許多可用的庫。 很好的實現之一是Trove
我希望您可以使用原始集合節省空間和時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.