我需要更改此程序以使用数组而不是arraylist。显然我需要创建一个对象数组并将其强制转换为E [],但我不明白如何做到这一点。任何帮助表示赞赏。
public class GenericStack<E> {
private java.util.ArrayList<E> list = new java.util.ArrayList<E>();
public int getSize() {
return list.size();
}
public E peek() {
return list.get(getSize() - 1);
}
public E push(E o) {
list.add(o);
return o;
}
public E pop() {
E o = list.get(getSize() - 1);
list.remove(getSize() - 1);
return o;
}
public boolean isEmpty() {
return list.isEmpty();
}
}
答案 0 :(得分:1)
而不是:
private java.util.ArrayList<E> list = new java.util.ArrayList<E>();
使用:
private Object[] array = new Object[];
当您必须返回某个值时,将其强制转换为E.例如:
public E get(int i) {
return (E) array[i];
}
这是必要的,因为Java不允许您创建泛型类型的数组。
答案 1 :(得分:0)
您可以使用以下命令创建阵列。
CentOS-2
使用它你也可以实现其他方法。 private E[] arr;
private int index;
public void initialize() {
arr = (E[]) new Object[100];
index = 0;
}
public E push(E o) {
try {
arr[index++] = o;
} catch (Exception e) {
System.out.println("Array not enough..");
}
return o;
}
可用于计算堆栈的大小。
在上面的示例中,超出数组边界时会打印错误。相反,您可以在index
时将数组复制到另一个变量中。您可以使用以下函数来复制数组..
index == arr.length - 1
答案 2 :(得分:0)
答案 3 :(得分:0)
实际上你想要做的是使用数组的堆栈实现。
public class GenericStack<E> {
private int index;
private E[] array;
public GenericStack(int size) {
array = (E[]) new Object[size];
index = 0;
}
public int getSize() {
return index;
}
public int getCapacity() {
return array.length;
}
public E peek() {
return array[index-1];
}
// push MUST be void, it only pushes the value into the stack
public void push(E o) {
array[index++] = o;
}
public E pop() {
E o = array[index-1];
index--;
return o;
}
public boolean isEmpty() {
return index == 0 ? true : false;
}
}
public class TestGenericStack {
public static void main(String[] args) {
GenericStack<Integer> genStack = new GenericStack<Integer>(10);
// test size
System.out.println("Size of the Stack : " + genStack.getSize());
// test isEmpty()
System.out.println("Stack isEmpty : " + genStack.isEmpty());
System.out.println("*** Stack push operations ***");
// test push
genStack.push(new Integer(10));
genStack.push(new Integer(20));
genStack.push(new Integer(30));
genStack.push(new Integer(15));
genStack.push(new Integer(99));
// test isEmpty()
System.out.println("Stack isEmpty : " + genStack.isEmpty());
// test peek
System.out.println("Top of the Stack : " + genStack.peek());
// test size
System.out.println("Size of the Stack : " + genStack.getSize());
// test pop
System.out.println("Pop from the Stack : " + genStack.pop());
// test peek
System.out.println("Top of the Stack : " + genStack.peek());
// test size
System.out.println("Size of the Stack : " + genStack.getSize());
}
}
Size of the Stack : 0
Stack isEmpty : true
*** Stack push operations ***
Stack isEmpty : false
Top of the Stack : 99
Size of the Stack : 5
Pop from the Stack : 99
Top of the Stack : 15
Size of the Stack : 4
答案 4 :(得分:0)
数组不能使用泛型类型,因为它需要为该类型分配内存。因此,它需要事先知道它是哪种类型。您可以使用newInstance()方法将使用ArrayList实现的堆栈转换为Array。代码将如下所示。
if ($('#wpadminbar')[0])
$('.header').css('top', '32px')
$(window).scroll(function() {
var sticky = $('.header'),
scroll = $(window).scrollTop();
if (scroll >= 50) {
sticky.addClass('fixed');
sticky.css("background-position","fixed");
body.css("padding-top", "70px");
} else {
sticky.removeClass('fixed');
body.css("padding-top", "none");
}
});
答案 5 :(得分:-2)
在编译中删除了泛型,因此Helper.toArray
将被编译为返回Object[]
。
对于这种特殊情况,我建议你使用List.toArray(E [])。
List<E> list = new ArrayList<E>();
list.add(...);
list.add(...);
T[]array = list.toArray(new E[list.size()]);