我们如何以反向方式获取列表对象?

3

您好,我正在获取一个包含表格pojo类对象的列表对象。在我的情况下,我需要以相反的顺序显示表格数据。这意味着,例如,当我向特定表格添加一些行时,最近添加的数据会存储在表格的最后一行(在数据库中)。在这里,我需要在我的jsp页面中显示整个表的内容,并以相反的顺序显示,即我最近插入的内容必须在我的jsp页面的第一行显示。

我的代码如下:

List lst = tabledate.getAllData();//return List<Table> Object
Iterator it = lst.iterator();
MyTable mt = new MyTable();//pojo class
while(it.hasNext())
{
     mt=(MyTable)it.next();
     //getting data from getters.
     System.out.println(mt.getxxx());
     System.out.println(mt.getxxx());
     System.out.println(mt.getxxx());
     System.out.println(mt.getxxx());
}
2个回答

9
使用 ListIterator 来遍历列表,使用 hasPrevious()previous() 方法:
ListIterator it = lst.listIterator(lst.size());
while(it.hasPrevious()) {
    System.out.println(it.previous());
}

1
@a_horse 我喜欢当 OP 选择“更差”的答案。哎,算了。 :-/ - moinudin
好的,你的答案是错误的。应该写成ListIterator it = lst.listIterator(lst.size());。 - adamax
@adamax 当然,我怎么会错过那个!谢谢你指出来。 - moinudin

1

在这种情况下,您不能使用迭代器。您需要使用基于索引的访问:

int size = lst.size();
for (int i=size - 1; i >= 0; i --)
{
  MyTable mt = (MyTable)lst.get(i);
  ....
}

顺便说一句:在循环之前没有必要创建一个新的MyTable()。这是一个将立即被丢弃并且没有任何作用的实例。


如果这是一个链表,那么它将需要O(n^2)的时间,而不是O(n)。 - adamax
同意。这就是为什么ListIterator会更好的原因 ;) - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接