加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – ArrayList removeAll()不删除对象

发布时间:2020-12-15 02:00:59 所属栏目:Java 来源:网络整理
导读:我有成员类的简单ArrayLists: ArrayListMember mGroupMembers = new ArrayList();ArrayListMember mFriends = new ArrayList(); 会员类: public class Member { private String userUID; private String userName; public String getUserUID() { return us
我有成员类的简单ArrayLists:

ArrayList<Member> mGroupMembers = new ArrayList<>();
ArrayList<Member> mFriends = new ArrayList<>();

会员类:

public class Member {
    private String userUID;
    private String userName;

    public String getUserUID() {
        return userUID;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setUserUID(String userUID) {
        this.userUID = userUID;
    }


}

用于朋友的ArrayList包含所有用户朋友.我只想做的是从朋友列表中删除,如果有的话,小组成员:

mFriends.removeAll(mGroupMembers);

然而它对mFriends名单没有任何作用……

查看日志语句,朋友确实出现在mGroupMember列表中.

为什么这不起作用?

解决方法

如何确定2名成员是平等的?我猜他们是否有相同的ID,你认为它们是相同的,但java希望它们在内存中是完全相同的引用,可能不是这种情况.要纠正这个问题,你可以覆盖equals函数,让它在id相等时返回:

public class Member {
    //..

    @Override
    public boolean equals(Object anObject) {
        if (!(anObject instanceof Member)) {
            return false;
        }
        Member otherMember = (Member)anObject;
        return otherMember.getUserUID().equals(getUserUID());
    }
}

此外,当您覆盖.equals时,建议还要覆盖hashCode,以便对象在散列函数(如Set或Map)中也能正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读