【问题标题】:Java Dynamic arraysJava 动态数组
【发布时间】:2013-03-31 06:15:22
【问题描述】:

我正在学习 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() 中缺少一个参数?

标签: java arrays dynamic


【解决方案1】:

将此用于您的第一个示例程序,我在 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;
}
}

【讨论】:

  • 非常感谢您的帮助
【解决方案2】:

您为什么不尝试收藏? 因为我认为 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 是合适的。

希望对你有帮助。

【讨论】:

  • 我知道这已经过时了,但希望人们仍然会阅读。他要求手动编码的动态数组而不是内置数组列表/链接列表的原因是因为这是大多数编程课程需要的,以帮助我们了解更多信息。目前我在一个 Java 类中,我们不允许使用 Array List 或内置的 Link List,而是鼓励我们构建自己的。这种实践教会了我很多关于 Java 和编程的知识。
【解决方案3】:

您在 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 -- 这是要复制的数组元素的数量。

【讨论】:

    【解决方案4】:

    看看java中collection的原始实现。有许多可用的库。一个好的实现是Trove

    我希望您可以使用原始集合来节省空间和时间。

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2016-03-23
      • 2012-08-14
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      相关资源
      最近更新 更多