Java 向节点内的数组添加整数
所以我的问题的概念是:假设我们有节点。每个节点都有一个整数数组。现在,我们必须在数组的末尾添加一个整数。我们怎么做 以下是我迄今为止所做的工作: 已创建类节点:Java 向节点内的数组添加整数,java,arrays,integer,add,Java,Arrays,Integer,Add,所以我的问题的概念是:假设我们有节点。每个节点都有一个整数数组。现在,我们必须在数组的末尾添加一个整数。我们怎么做 以下是我迄今为止所做的工作: 已创建类节点: public class Node { private int[] data; Node next; public Node(int n, Node nxt) { data = new int[n]; next = nxt; } } 然后,动态数组列表类: public class DynamicArrayOfI
public class Node {
private int[] data;
Node next;
public Node(int n, Node nxt) {
data = new int[n];
next = nxt;
}
}
然后,动态数组列表类:
public class DynamicArrayOfInts {
private Node head = null;
private int numOfElementsPerNode = 0;
public DynamicArrayOfInts(int elementsPerNode) {
numOfElementsPerNode = elementsPerNode;
}
public void add(int e) {
}
}
您应该在
节点
类中添加一个属性,以了解当前节点数组的当前索引。我还想在dynamicarrayofits
中添加一个属性,以保留当前节点的引用
然后在add方法中,检查当前节点的数组是否已满(这很容易完成,因为您知道索引的值和每个节点的元素数)
如果不是这样(或者如果第一个add调用的head为null),则创建一个新节点并将元素添加到其数组中,否则只需为当前节点填充数组的下一个插槽
这就是我将如何实现它
class DynamicArrayOfInts {
private Node head, current;
private int numOfElementsPerNode;
public DynamicArrayOfInts(int elementsPerNode) {
if(elementsPerNode <= 0)
throw new IllegalArgumentException("elementsPerNode must be > 0");
numOfElementsPerNode = elementsPerNode;
}
public void add(int e) {
if(head == null){
head = new Node(numOfElementsPerNode, null);
head.data[head.index++] = e;
current = head;
return;
}
if(current.index == numOfElementsPerNode){
Node n = new Node(numOfElementsPerNode, null);
current.next = n;
current = n;
}
current.data[current.index++] = e;
}
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
Node n = head;
while(n != null){
sb.append(Arrays.toString(n.data));
n = n.next;
}
return sb.toString();
}
private static class Node {
private int[] data;
private int index;
private Node next;
public Node(int n, Node nxt) {
data = new int[n];
index = 0;
next = nxt;
}
}
}
输出:
[5, 0]
[5, 7]
[5, 7][10, 0]
[5, 7][10, -1]
不幸的是,在这种情况下,您必须创建一个新数组(是的,我感觉到了您的痛苦),该数组将比
data
多出一个元素。您必须将数据的内容
复制到新数组中,并将最后一个元素设置为int
值。这不是很优雅,这就是为什么Mureinik建议您应该使用节点的ArrayList
(ArrayList
)来代替。我甚至可以加强他的建议,使您的解决方案更加通用,并告诉您使用抽象列表
,然后用ArrayList
对其进行实例化,但与您当前的级别相比,这可能太高级了(无意冒犯,我们都在那里)。至于您的确切问题,我设想在您的Node类中使用如下方法来处理此问题
public void push(int newValue) {
int[] newData = new int[data.length + 1];
for (int i = 0; i < data.length; i++) {
newData[i] = data[i];
}
newData[data.length] = newValue;
data = newData;
}
公共无效推送(int newValue){
int[]newData=newint[data.length+1];
对于(int i=0;i
为什么不直接使用ArrayList
?而不使用节点呢?分配说明我们必须使用节点。我建议用JDK的ArrayList
替换dynamicarrayofts
,而不是去掉节点
类。
public void push(int newValue) {
int[] newData = new int[data.length + 1];
for (int i = 0; i < data.length; i++) {
newData[i] = data[i];
}
newData[data.length] = newValue;
data = newData;
}