gpt4 book ai didi

java - ArrayList removeAll() 不删除对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:49:10 25 4
gpt4 key购买 nike

我有成员类的简单 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;
}


}

friend 的 ArrayList 包含所有用户 friend 。我只想从好友列表中删除群组成员(如果存在):

mFriends.removeAll(mGroupMembers);

然而它对 mFriends 列表没有任何作用...

查看日志语句, friend 确实出现在 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

关于java - ArrayList removeAll() 不删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35960300/

25 4 0