我应该如何以我放入的方式的相反顺序存储我想要访问的对象

时间:2012-09-04 21:30:52

标签: java maze

我在这里关注本指南:http://www.mazeworks.com/mazegen/mazetut/index.htm

或者更具体地说

create a CellStack (LIFO) to hold a list of cell locations 
set TotalCells = number of cells in grid 
choose a cell at random and call it CurrentCell 
set VisitedCells = 1 

while VisitedCells < TotalCells 

find all neighbors of CurrentCell with all walls intact  
if one or more found 
    choose one at random 
    knock down the wall between it and CurrentCell 
    push CurrentCell location on the CellStack 
    make the new cell CurrentCell 
    add 1 to VisitedCells else 
    pop the most recent cell entry off the CellStack 
    make it CurrentCell endIf 

endWhile

我在java中写这个,我的问题是。

我应该如何存储我访问过的单元格,这样我就可以按照相反的顺序访问它们。

喜欢这个?

List<Location> visitedCells = new ArrayList<Location>();

Then do I grab with visitedCells.get(visitedCells.size()-1)?

位置存储x,y和z。 不是我试图问你的事。

3 个答案:

答案 0 :(得分:3)

您可以使用Stack来实现此目的:

Stack<Location> visitedCells = new Stack<Location>();
visitedCells.push(myLocation1);
visitedCells.push(myLocation2);

// Get last one in but DONT remove
Location location2 = visitedCells.peek(); 

// Get last one in and remove
location2 = visitedCells.pop(); 

答案 1 :(得分:3)

LIFO结构最好使用Deque对象而不是Stack在Java中实现。 Stack类扩展Vector,仅用于向后兼容。

要使用Deque,最好的办法是使用实​​现LinkedList界面的Deque

Deque<Location> locationStack = new LinkedList<Location>();

ArrayDeque

Deque<Location> locationStack = new ArrayDeque<Location>();

然后使用pushpop方法推送和弹出Location个对象。

Stack类有一堆同步开销,或多或少没用,只会导致代码在进入和退出同步代码时变慢。

答案 2 :(得分:0)

以下代码按您添加的顺序存储值。

List<Location> visitedCells = new ArrayList<Location>();

然后你可以打电话

Collections.reverse(visitedCells);

为您提供反向排序列表。

(或)

您可以使用ArrayDeque