在lambda中使用的堆栈是打印FIFO
我正在尝试将十进制值转换为二进制值,我使用堆栈作为数据结构。当使用普通的堆栈pop时,它以正确的顺序打印我,例如4,二进制转换将为100。但我对java 8还不熟悉,我试图尽可能多地使用lambda来学习,在学习过程中,我意识到它的打印FIFO ex for 4它正在打印001。 请找到下面的代码,让我知道我哪里做错了在lambda中使用的堆栈是打印FIFO,lambda,java-8,Lambda,Java 8,我正在尝试将十进制值转换为二进制值,我使用堆栈作为数据结构。当使用普通的堆栈pop时,它以正确的顺序打印我,例如4,二进制转换将为100。但我对java 8还不熟悉,我试图尽可能多地使用lambda来学习,在学习过程中,我意识到它的打印FIFO ex for 4它正在打印001。 请找到下面的代码,让我知道我哪里做错了 package com.interview.random; import java.util.Stack; public class ConvertDecimalToBina
package com.interview.random;
import java.util.Stack;
public class ConvertDecimalToBinary {
public Stack<Integer> convertToBinary(int num){
Stack<Integer> st=new Stack<>();
while(num>1){
st.push(num%2);
num=num/2;
}
st.push(num);
return st;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack<Integer> st=new ConvertDecimalToBinary().convertToBinary(4);
//printing correctly
while(!st.isEmpty()){
System.out.println(st.pop());
}
//Printing in FIFO not correct
st.forEach(i->System.out.println(i));
}
package com.interview.random;
导入java.util.Stack;
公共类十进制{
公共堆栈convertToBinary(int num){
Stack st=新堆栈();
while(num>1){
st.push(数量%2);
num=num/2;
}
st.push(num);
返回st;
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
堆栈st=新ConvertDecimalToBinary().convertToBinary(4);
//正确打印
而(!st.isEmpty()){
System.out.println(st.pop());
}
//在FIFO中打印不正确
st.forEach(i->System.out.println(i));
}
}堆栈的迭代顺序为FIFO。中没有明确规定这一点,但实现就是这样做的 然而,政府确实这样说:
Deque
接口及其实现提供了一套更完整、更一致的后进先出堆栈操作,应优先于此类使用
提供两个迭代器,一个用于FIFO顺序,另一个用于LIFO顺序。Deque::forEach
方法被指定为按FIFO顺序访问,但您可以这样做:
dq.reverseIterator().ForEachLeving(i->System.out.println(i)) 堆栈的迭代顺序为FIFO。中没有明确规定这一点,但实现就是这样做的 然而,政府确实这样说:
Deque
接口及其实现提供了一套更完整、更一致的后进先出堆栈操作,应优先于此类使用
提供两个迭代器,一个用于FIFO顺序,另一个用于LIFO顺序。Deque::forEach
方法被指定为按FIFO顺序访问,但您可以这样做:
dq.reverseIterator().ForEachLeving(i->System.out.println(i)) Stack在LIFO上工作,当我使用Stack.pop()时,我尝试对上面的代码使用Stack。上面的代码得到的结果是100,而lambda表达式得到的结果是001。为什么会这样?Stack在后进先出中工作,我在使用Stack.pop()时尝试对上面的代码使用Stack。使用上面的代码得到的结果是100,使用lambda表达式得到的结果是001。为什么会这样?Stack在后进先出中工作,我在使用Stack.pop()时尝试对上面的代码使用Stack。使用上面的代码得到的结果是100,使用lambda表达式得到的结果是001。为什么会这样?你的意思是说堆栈并不总是后进先出?我已经解释过了。
堆栈的迭代顺序为FIFO。但是(显然)当您使用push
和pop
时,顺序是后进先出。因此每个堆栈的期望(预期结果)是FIFO?不要忘记,java.util.stack
只是一个扩展的java.util.Vector
,提供了一些在列表末尾添加和删除的方法。多次调用push(…)
与多次调用add(…)
和Vector没有什么不同。forEach(…)
仍然按照元素添加的顺序迭代元素。当您查看时,您可以清楚地看到哪些方法是由Stack
添加或重写的,哪些是从Vector
继承的。所有继承的方法仍然具有列表语义。Stack在LIFO上工作,当我使用Stack.pop()时,我尝试对上面的代码使用Stack。使用上面的代码得到的结果是100,使用lambda表达式得到的结果是001。为什么会这样?你的意思是说堆栈并不总是后进先出?我已经解释过了。堆栈的迭代顺序为FIFO。但是(显然)当您使用push
和pop
时,顺序是后进先出。因此每个堆栈的期望(预期结果)是FIFO?不要忘记,java.util.stack
只是一个扩展的java.util.Vector
,提供了一些在列表末尾添加和删除的方法。多次调用push(…)
与多次调用add(…)
和Vector没有什么不同。forEach(…)
仍然按照元素添加的顺序迭代元素。当您查看时,您可以清楚地看到哪些方法是由Stack
添加或重写的,哪些是从Vector
继承的。所有继承的方法仍然具有列表语义。