java - 为什么队列中的元素相同

标签 java queue

<分区>

在项目中我负责的是邮件发送功能,但是在使用队列的时候出现了问题。

private void createReportEmail()
{
    try
    {
        List<Map> list = emailMapper.getToAddress();
        System.out.println(list);
        MailSenderInfo mailSenderInfo = new MailSenderInfo();
        mailSenderInfo = CreateEmailService.sendReportMail(emailMapper);
        InternetAddress address = new InternetAddress();
        for (int i = 0; i < list.size(); i++)
        {
            if (list.get(i).get("address").toString() != null && list.get(i).get("address").toString() != "")
                address = new InternetAddress(list.get(i).get("address").toString());
            MailSenderInfo mailSenderInfo2 = new MailSenderInfo();
            mailSenderInfo2 = mailSenderInfo;
            mailSenderInfo2.setAddress(address);
            queue.offer(mailSenderInfo2);
        }
        for(int i =0;i<list.size();++i)
        {
            System.out.println(queue.poll().getAddress());
        }

    } catch (Exception e)
    {
        e.printStackTrace();
    }
}

现在我确定List中的元素是互不相同的,但是队列中存储的都是列表最后一个元素的内容。我想知道为什么

最佳答案

您在循环的每次迭代中都创建了一个新的 MailSenderInfo 实例,这是正确的做法,但随后您将其替换为现有的 MailSenderInfo 实例 (在循环之前创建 - MailSenderInfo mailSenderInfo = new MailSenderInfo();),因此您总是将相同的 MailSenderInfo 实例添加到队列中:

    for (int i = 0; i < list.size(); i++) { 
        ...
        MailSenderInfo mailSenderInfo2 = new MailSenderInfo();
        mailSenderInfo2 = mailSenderInfo; // remove this
        mailSenderInfo2.setAddress(address);
        queue.offer(mailSenderInfo2);
    }

关于java - 为什么队列中的元素相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465805/

相关文章:

c++ - 无锁 fifo 缓冲区中的删除节点检测

java - 队列内容反转

algorithm - 随机队列实现 - 随机性的想法

java - 使用从 RSA 解密获得的解密 DES key

java - 访问 Steam 军团要塞 2 帐户信息的脚本

java - 使用 string,match() 时出现 PatternSyntaxException

c++ - 队列的指针问题

java - Queue的并发版本需要异常

java - 获取错误膨胀类 android.support.design.widget.NavigationView

java - 使用 jna 调用 ioctl 系统调用