从java列表中删除相同的项目

时间:2012-03-20 17:29:30

标签: java collections

我有一个项目列表,其中每个项目都是一个包含2个公共字符串的简单类。 我有一个equals方法,只使用两个字符串的equalsIgnoreCase methot。

public class data
{
    public String a;
    public String b;

    public boolean equals(data d)
    {
        if(a.equalsIgnoreCase(d.a) && b.equalsIgnoreCase(d.b))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

我希望能够删除一个元素,即使它与列表中的元素不同,但也等于它。

现在我正在这样做:

public void remove(data dataToRemove)
{
    for(data i : _list)
    {
        if(i.equals(dataToRemove))
        {
            _list.remove(i);
            break;
        }
    }
}

有更好的方法吗?

2 个答案:

答案 0 :(得分:15)

一些评论:

  • 您的equals方法 覆盖equals的{​​{1}}方法(参数应为Object类型,而不是Object } type)。
  • 您应该改进data方法以考虑空值等。
  • 最后,当你覆盖equals时,你也应该覆盖hashcode() - 如果不是,你可能会在使用集合或地图时遇到一些奇怪的行为。

如果您正确覆盖equals()方法,则可以使用equals方法。 请参阅以下由Netbeans生成的自动生成的removeequals,并使用hashcode方法进行了修改。

equalsIgnoreCase

答案 1 :(得分:1)

最明确的方法是在没有任何循环的情况下调用列表的Remove方法,并将参数传递给对象。它使用您在对象上定义的equals方法来查找并删除它(如果它存在于列表中。

_list.remove(data);

您也不必指定hashcode方法,但是当您在集合或Map等集合中使用它时,您应该养成在覆盖equals方法时始终创建一个方法的习惯。