如何在JAVA中显示多个LinkedList元素看起来像一个表?

时间:2013-01-02 22:23:27

标签: java linked-list listiterator

我是新来的,这是我第一次发帖,所以请原谅我,如果我犯了任何错误。我想显示4个LinkedList中的元素以及要在表格中显示的元素。我不需要JTable,因为我不需要GUI。我已经尝试过使用ListIterator,但它并没有全部显示:我的意思是如果一个列表有5个元素而另一个有3个将只显示每个列表中的3个元素。 一段价值超过百万字的代码,所以:

    LinkedList list1 = new LinkedList();
    LinkedList list2 = new LinkedList();
    LinkedList list3 = new LinkedList();
    LinkedList list4 = new LinkedList();

    list1.addFirst("A");
    list1.addFirst("B");
    list1.addFirst("C");
    list1.addFirst("D");
    list1.addFirst("E");
    list1.addFirst("F");

    list2.addFirst("G");
    list2.addFirst("H");
    list2.addFirst("I");
    list2.addFirst("J");
    list2.addFirst("K");
    list2.addFirst("L");
    list2.addFirst("M");

    list3.addFirst("N");
    list3.addFirst("O");
    list3.addFirst("P");
    list3.addFirst("Q");
    list3.addFirst("R");
    list3.addFirst("S");
    list3.addFirst("T");
    list3.addFirst("U");

    list4.addFirst("V");
    list4.addFirst("W");
    list4.addFirst("X");
    list4.addFirst("Y");
    list4.addFirst("Z");

    ListIterator it1 = list1.listIterator();
    ListIterator it2 = list2.listIterator();
    ListIterator it3 = list3.listIterator();
    ListIterator it4 = list4.listIterator();

    while (it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext()){

        System.out.println(it1.next()+"\t\t\t"+ it2.next()+"\t\t\t"+it3.next()+"\t\t\t"+it4.next());
    }

输出如下:

http://imageshack.us/photo/my-images/9/capturelkt.png/

我很困惑,为什么这是输出,所以如果有人可以解释我做错了什么或者可以给我一个提示或一个例子,我将感激不尽。这不是一个功课,我只是在学习单独的JAVA。提前谢谢!

3 个答案:

答案 0 :(得分:2)

您没有看到A行的原因是因为这一行:

it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext()

只要您的某个列表中没有元素,就会停止。

要解决此问题,您必须继续工作,直到所有列表都没有元素。但是,如果它们没有元素,你就不能只访问这些列表,所以你必须解决它。

// change && to ||
while(it1.hasNext() || it2.hasNext() || it3.hasNext() || it4.hasNext()) {
    Object[] objs = new String[] { "", "", "", ""}; // empty strings
    // if iterators on this row are not empty, replace with values
    if(it1.hasNext()) objs[0] = it1.next();
    if(it2.hasNext()) objs[1] = it2.next();
    if(it3.hasNext()) objs[2] = it3.next();
    if(it4.hasNext()) objs[3] = it4.next();
    // now print
    String tabs = "\t\t\t";
    System.out.println(objs[0] + tabs + objs[1] + tabs + objs[2] + tabs + objs[3]);

}

没有数组,这会更快,而是使用了严格数量的对象。但是如果我们将它作为一个数组放置,我认为它更简洁,更容易重构。

答案 1 :(得分:1)

它从一开始打印,以便您下次打印(迭代它),您将打印最近添加的项目,因为您每次都要添加项目)

这一行

while (it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext()){

只有当所有列表都有下一个值时才打印,因为最短列表的大小只有5(列表4),所以只打印5个值

答案 2 :(得分:1)

您正在使用&&所以当迭代器的hasNext()返回false时,(it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext())的整个评估将为false。