Sau*_*ron 5 java android arraylist
我有成员类的简单ArrayLists:
ArrayList<Member> mGroupMembers = new ArrayList<>();
ArrayList<Member> mFriends = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
会员类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
用于朋友的ArrayList包含所有用户朋友.我只想删除好友列表,小组成员如果出现:
mFriends.removeAll(mGroupMembers);
Run Code Online (Sandbox Code Playgroud)
但它没有对mFriends
清单做任何事......
查看日志语句,朋友确实出现在mGroupMember
列表中.
为什么这不起作用?
Kev*_*lia 18
如何确定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());
}
}
Run Code Online (Sandbox Code Playgroud)
此外,当您覆盖.equals
它时,建议也覆盖它,hashCode
以便对象也可以在散列函数中正常工作,如Set
或Map
.
你必须知道
ArrayList#removeAll(Collection)
打电话给
ArrayList#contains(Object)
打电话给
ArrayList#indexOf(Object)
最后打电话给
Object#equals
因此,如果equals
未正确覆盖(遵循equals
合同规则),则无法获得正确的行为.
归档时间: |
|
查看次数: |
12503 次 |
最近记录: |