Java-如何使用另一个现有堆栈初始化堆栈?
我已经在使用Java-如何使用另一个现有堆栈初始化堆栈?,java,android,stack,Java,Android,Stack,我已经在使用Stackwhat using class type forTOKEN,现在我想先使用Stack创建并初始化新的Stack 首先我认为C#的代码 Stack e_infixTokens=新堆栈(infixTokens) C#的堆栈构造函数使用另一个堆栈作为参数,但我认为JAVA没有。我说得对吗 这是我代码的开始部分 private Stack<Token> infixTokens; private Stack<Token> postfixTokens; Fo
Stack
what using class type forTOKEN
,现在我想先使用Stack创建并初始化新的Stack
首先我认为C#的代码
Stack e_infixTokens=新堆栈(infixTokens)代码>
C#的堆栈构造函数使用另一个堆栈作为参数,但我认为JAVA没有。我说得对吗
这是我代码的开始部分
private Stack<Token> infixTokens;
private Stack<Token> postfixTokens;
Formula(String formula){
this.formula = formula;
this.infixTokens = new Stack<>();
this.postfixTokens = new Stack<>();
私有堆栈内挤;
私有堆栈后缀标记;
公式(字符串公式){
这个公式=公式;
this.infixTokens=新堆栈();
this.postfix令牌=新堆栈();
下面几行,我用这句话
Stack<Token> e_infixTokens = new Stack<>(infixTokens);
Stack e_infixTokens=新堆栈(infixTokens);
发生错误。错误消息为:
堆栈中的Stack()不能应用于Java.util.Stack
一个简单的方法是这样的
Stack<String> stackCopy = (Stack<String>) stack1.clone();
此外,在第二种方法中,调用“add”和调用“push”的速度相似。不完全清楚您在寻找什么。是否要新堆栈(e_infixTokens
)与infixTokens
相同的Stack
?还是要制作一个新的Stack
,它是infixTokens
的副本?对于非C用户来说,一些说明会很好。尝试阅读您正在使用的类的javadoc。这里有一个所有可用的构造函数和方法的列表。
Stack<String> stackCopy = new Stack<String>();
for (String string : stack) {
stackCopy2.add(string);
}
public static void main(String[] args) throws Exception {
Stack<String> stack = new Stack<String>();
for (int i = 0; i < 1000; i++) {
stack.push("" + i);
}
{
Stack<String> stackCopy = null;
long time = System.currentTimeMillis();
final int numIterations = 100000;
for (int i = 0; i < numIterations; i++) {
stackCopy = (Stack<String>) stack.clone();
}
System.out.println("stackCopy.get(0) 1 = " + stackCopy.get(0));
long millis = System.currentTimeMillis() - time;
System.out.println("Time taken for this: "
+ (millis > 100000 ? (millis / 1000) + " seconds." : millis + " milliseconds."));
}
{
Stack<String> stackCopy = null;
long time = System.currentTimeMillis();
final int numIterations = 100000;
for (int i = 0; i < numIterations; i++) {
stackCopy = new Stack<String>();
for (String string : stack) {
stackCopy.add(string);
}
}
System.out.println("stackCopy.get(0) 2 = " + stackCopy.get(0));
long millis = System.currentTimeMillis() - time;
System.out.println("Time taken for this: "
+ (millis > 100000 ? (millis / 1000) + " seconds." : millis + " milliseconds."));
}
}
stackCopy.get(0) 1 = 0
Time taken for this: 70 milliseconds.
stackCopy.get(0) 2 = 0
Time taken for this: 4098 milliseconds.