Stack to --> ArrayList Java

2022-09-03 04:20:23

我做了一个Stack和一个ArrayList来做研究。实际上,我现在想让我的堆栈被ArrayList取代,但是如何将堆栈转换为ArrayList?它是如何与推,流行...?

谢谢

public static ArrayList<State> search(State finalstate)
{
    ArrayList<State> toreturn = new ArrayList<State>();
    Stack<State>mystack=new Stack<State>();
    mystack.push(initState);
    State currState;
    currState=initState;
    while(!mystack.isEmpty() && !currState.equals(finalstate) )
    {
        currState=mystack.pop();
        toreturn.add(currState);
        if(currState.vecinos.containsKey("up"))
        {
            mystack.push(currState).vecinos.get("up");
        }
        if(currState.vecinos.containsKey("down"))
        {
            mystack.push(currState).vecinos.get("down");
        }
        if(currState.vecinos.containsKey("left"))
        {
            mystack.push(currState).vecinos.get("left");
        }
        if(currState.vecinos.containsKey("right"))
        {
            mystack.push(currState).vecinos.get("right");
        }
    }

    return toreturn;
}

答案 1

堆栈是一个集合,可以使用 ArrayList(集合) 构造函数

list = new ArrayList(stack);

答案 2

我发现将堆栈转换为列表的最简单方法是使用以下行:

List<Integer> stackToList = new ArrayList(stack);

但是,这会产生反向堆栈。这意味着,如果您的堆栈是 1,2,3,您会期望在列表 3,2,1 中,因为这是堆栈对象被“弹出”的顺序。但事实并非如此,你会得到1,2,3。因此,为了获得预期的输出,您需要执行

Collections.reverse (stackToList);

这将以内联方式反转列表,并为您提供3,2,1