ArrayList removeAll()不删除对象
我有成员类的简单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
。
以上是 ArrayList removeAll()不删除对象 的全部内容, 来源链接: utcz.com/qa/423190.html