【问题标题】:Java - ArrayList remove() is not removingJava - ArrayList remove() 未删除
【发布时间】:2014-04-09 03:09:32
【问题描述】:

我在使用 ArrayList 中的 remove() 函数时遇到问题。 我会尽量简短。 我有一个 ArrayList,Posicao 是我创建的另一个类,我在 Array 中放置了一些对象。 问题是,当我打印 ArrayList 中的所有值时,我得到了期望,但是当我尝试使用 remove(object) 或 lastIndexOf(value) 时,它不起作用。 Remove() 不会删除任何内容,并且 lastIndexOf(),甚至 indexOf(),我收到一条错误消息,指出我请求的对象不在数组中。 我仔细检查了一下,对象实际上就在那里。 有什么我做错了吗? 我遇到问题的代码部分。 如果还有其他需要发布的内容,请询问。 (=

System.out.println("BEGIN - Print beforeremove:" + tabuleiro0.posicoesLivres.contains(pos));
    for(int i = 0 ; i < tabuleiro0.posicoesLivres.size() ; i++)
        System.out.println(((Posicao)tabuleiro0.posicoesLivres.get(i)).x + " " + ((Posicao)tabuleiro0.posicoesLivres.get(i)).y);
    System.out.println("END - Print before remove :");

    tabuleiro0.posicoesLivres.remove(pos);

    System.out.println("BEGIN - Print after remove:" + tabuleiro0.posicoesLivres.contains(pos));
    for(int i = 0 ; i < tabuleiro0.posicoesLivres.size() ; i++)
        System.out.println(((Posicao)tabuleiro0.posicoesLivres.get(i)).x + " " + ((Posicao)tabuleiro0.posicoesLivres.get(i)).y);
    System.out.println("END - Print after remove :");

感谢您的耐心等待(=

【问题讨论】:

  • 您能告诉我们pos 变量的设置位置吗?在调用remove() 以验证它不是逻辑错误之前,您是否打印出pos...?
  • 等待tabuleiro0.posicoesLivres.contains(pos)pos 是值还是位置?
  • 另一个函数设置 pos 然后调用我打印的这个函数。我打印了 pos 并且我得到了正确的值,但找不到删除它。 Pos 是我在 Posicao 类中创建的一个对象,它有 2 个整数,x 和 y。

标签: java linux ubuntu arraylist


【解决方案1】:

您的问题可能是您的类需要覆盖 Object#hashCodeObject#equals 方法。

这些方法是强制实现的,以便 Java Collections 在必须查找某些元素、为自己排序和所有内容时能够正常工作...

您可以阅读有关when do I need to override equals and hashcode methods?overriding equals and hashCode in Java 的更多信息;)

作为记录,使用 Eclipse(或任何像样的 Java IDE,我猜),您可以使用一些菜单项功能为您实现这些: Source -> 生成 hashCode() 和 equals() 方法...

【讨论】:

  • 谢谢伙计。我这样做了,但没有用。当我使用 remove()、indexOf() 或 lastIndexOf() 时,它们都找不到值。但如果我按索引删除,我知道它是第一个起作用的。
猜你喜欢
  • 1970-01-01
  • 2015-06-15
  • 2019-02-13
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 2013-12-10
相关资源
最近更新 更多