Java动态数组

我正在为java编程,我需要有关Dynamic数组的帮助。 我环顾四周,找不到符合我简单程度的方法。 我在课堂上并不远,只是学习了基础知识,所以我不太了解,但我需要知道如何制作动态数组。

以下是我们给出的两个示例程序:

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; i--) { System.out.println( numbers.get(i) ); } } } 

第二个应该inheritance第一个,并允许您在输入后创建更多数组。但是当我使用它们时,它表示我有一个错误,它表示只有在明确请求注释处理时才接受类名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; } } 

你为什么不尝试collections? 我认为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用于以具有双向链表的节点的forms进行顺序访问。 为了访问任何随机索引,它需要访问该节点的下一个地址。 因此对于随机检索/读取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中集合的原始实现。 有许多图书馆可供使用。 其中一个很好的实现是Trove

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