【问题标题】:Storing an Iterator Reference存储迭代器引用
【发布时间】:2011-07-26 03:36:13
【问题描述】:

我有一个包含联系信息(姓名、出生日期等...)的链接列表。我将列表中的联系人添加到 List 中。我想使用迭代器来浏览列表,以便我可以访问所有联系人的信息。这就是我遇到问题的地方。我使用 Next 按钮来访问所有联系人的信息,但我使用的是每次按 Next 时都会递增的索引。我不想使用增量,而是使用迭代器。当我使用迭代器时,我尝试保存引用,但我认为我做错了。

btnNext.addActionListener(new ActionListener() {

        private ContactList save;

public void actionPerformed(ActionEvent arg0) {

Iterator<ContactList> iterator = list.iterator();

if(iterator.hasNext())
{
save = itr.next();
name.setText(save.firstName);
lastName.setText(save.lastName);
dob.setText(save.dob);
homeNum.setText(save.homeNum);
cellNum.setText(save.cellNum);
            }
 }
 }};

我知道此代码仅获取列表中的第一个联系人。如果还按下按钮,我希望代码获得下一个联系人,但我知道,由于迭代器处于操作处理中,因此如果我尝试移动迭代器并放置它,它不会保存 itr.next()与其他字段然后我得到一个 ConcurrentModualError。任何帮助将不胜感激。

【问题讨论】:

    标签: java list iterator


    【解决方案1】:

    你已经接近了,但你实际上并没有保存 迭代器

    btnNext.addActionListener(new ActionListener() {
    
        // save the iterator, not the list item
        private Iterator<ContactList> iterator;
    
        public void actionPerformed(ActionEvent arg0) {
    
            if(iterator == null){
                iterator = list.iterator();
            }
    
            if(iterator.hasNext())
            {
                ContactList save = iterator.next(); // first time itr is mentioned, assume you mean iterator
                name.setText(save.firstName);
                lastName.setText(save.lastName);
                dob.setText(save.dob);
                homeNum.setText(save.homeNum);
                cellNum.setText(save.cellNum);
            }
         }
     }};
    

    这里的棘手部分是每次调用list.iterator() 都会获得一个新的迭代器,因此您的代码每次都从头开始。您希望您的ActionListener 在您第一次获得Iterator 时保存它,然后每次都继续使用它。

    【讨论】:

    • 谢谢,这正是我想要的。谢谢解释,有道理。
    【解决方案2】:

    您的错误实际上是 ConcurrentModificationException。使用 LinkedList,您不能在对其进行更改的同时使用 Iterator 对其进行迭代。通过像这样长期存储迭代器,您基本上可以保证它会发生。最简单的方法是存储您当前正在查看的列表的索引并让您的按钮更改索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2013-08-12
      • 2022-10-20
      • 2021-08-15
      相关资源
      最近更新 更多