簡體   English   中英

Java動態數組

[英]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.

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