在java中使用=运算符和数据结构

时间:2017-11-01 14:48:47

标签: java data-structures

我的问题很简单。如果我在java中有像堆栈这样的数据结构并添加一些元素,那么我创建其他堆栈并使用=运算符(示例1)等于第一个堆栈,而不是使用while循环清空第一个堆栈(示例2)。如果我尝试在其他范围内使用第二个堆栈,如果第一个堆栈为空,我可以丢失数据吗?

Stack<String> stack=new Stack<>();
Stack<String> stack_aux=new Stack<>();
stack.push("Hola");
stack.push("Mundo");
stack.push("in Java");

示例1

stack_aux=stack;

示例2

while(!stack.isEmpty()){
        stack_aux.push(stack.pop());
}

2 个答案:

答案 0 :(得分:1)

要将stack复制到另一个stack,您需要执行以下操作:

stack_aux.addAll(stack);

您不能只在示例1中使用=

您的示例2将正常工作。

修改

实际上更好的方法是使用clone()方法:

stack_aux = (Stack<String>) stack.clone();

答案 1 :(得分:1)

当我们采访新的Java程序员时,这是我们提出的基本问题之一。

What is the difference between =, ==, and equals() in Java?

其他一些SO帖子for example this已经回答了部分问题。未明确涵盖的Java基础之一是Java中的=符号是赋值运算符。也就是说,当你说

stack_aux=stack;

您正在将堆栈的值分配给变量stack_aux。

执行此操作时,如果您没有在其他变量中保留它的副本,则stack_aux的值将会丢失。无论堆栈是否为空,都会发生这种情况。

执行此操作时:

while(!stack.isEmpty()){
        stack_aux.push(stack.pop());
}

当stack不为空时,您将在stack_aux之上推送堆栈的值。