Java 从数组中删除最后一个元素并返回它
我的任务是在我自己的数组中实现,在这里我可以添加元素,然后删除第一个元素并返回它,最后一个元素也是如此。由于我不允许使用任何内置函数,如array.copyOf、ArrayList或任何其他使用java.util包的函数,我的知识是有限的 我的第一个解决方案是对takeFirst()和takeLast()方法使用类似的代码,这很有效,但我想知道是否有其他更好的解决方案来删除最后一个元素并返回它 以下是我目前的代码:Java 从数组中删除最后一个元素并返回它,java,Java,我的任务是在我自己的数组中实现,在这里我可以添加元素,然后删除第一个元素并返回它,最后一个元素也是如此。由于我不允许使用任何内置函数,如array.copyOf、ArrayList或任何其他使用java.util包的函数,我的知识是有限的 我的第一个解决方案是对takeFirst()和takeLast()方法使用类似的代码,这很有效,但我想知道是否有其他更好的解决方案来删除最后一个元素并返回它 以下是我目前的代码: public class MyQueue { private int[
public class MyQueue {
private int[] data = new int[1000];
// add new element to the end of queue
public void add(int i) {
if(size() == 0){
data[0] = i;
}else {
data[size()] = i;
}
}
public int size() {
int size = 0;
for(int elem: data) {
if(elem != 0) {
size++;
}
}
return size;
}
// removes first element and returns it
public int takeFirst() {
int firstItem = data[0];
int[] temp = new int[size() - 1]; // allocate proper size
for(int i = 1; i < size(); i++){
temp[i-1] = data[i]; // i-1 for temp array
}
data = temp;
return firstItem;
}
// removes last element and returns it
public int takeLast() {
return 0;
}
}
如果
takeFirst
和takeLast
的代码类似,则可以实现一个单独的方法removeAt
,并从上述方法调用:
public int takeFirst(){
return removeAt(0,1);//保留从索引1开始的数据
}
公共int takeLast(){
return removeAt(size()-1,0);//保留从索引0开始的数据
}
私有int-removeAt(int-index,int-keepFrom){
int removedItem=数据[索引];
int newSize=size()-1;
int[]tmp=newint[newSize];
for(int i=0,j=keepFrom;i
在类队列中保留一个索引字段,以跟踪数组的填充位置。“size=newSize;”行是否应该在前面声明,因为我不使用size变量only size()方法?:)抱歉,我忽略了这一点,我认为大小
是一个字段。但是,我也不确定是否总是需要调整大小,可能应该使用两个索引来引用第一个和最后一个元素,同时将0
设置为适当的元素。
// removes last element and returns it
public int takeLast() {
int lastItem = data[size() - 1];
int[] temp = new int[size() - 1]; // allocate proper size
for(int i = 1; i < size(); i++){
temp[i-1] = data[i]; // i-1 for temp array
}
data = temp;
return lastItem;
}
@Test
public void queueUsageExample() {
MyQueue queue = new MyQueue();
queue.add(1);
queue.add(3);
queue.add(5);
assertThat(queue.size(), is(3));
assertThat(queue.takeFirst(), is(1));
assertThat(queue.takeFirst(), is(3));
assertThat(queue.takeLast(), is(5));
assertThat(queue.size(), is(0));
}```