关于List时removeAll()注意事项

今天又踩了一个坑,故事是这样的:项目中用到@功能,在点击@的时候,显示用户关注的用户列表,为了改善用户体验(用户基本都@那么几个人),要把@ 的历史记录添加到用户关注的用户列表中,并移除重复的用户。
先说下我的思路:
1、拿到关注的用户和历史@用户;
2、使用removeAll()和addAll()操作这两个list拿到要显示的list

List users = event.data;
if (!StringUtil.isEmpty(mAtUserHistoryStr)) {
    mAtUserHistoryList = JSON.parseArray(mAtUserHistoryStr, User.class);
    users.removeAll(mAtUserHistoryList);
    users.addAll(0, mAtUserHistoryList);
}
showList(users);

3、在用户@好友的时候更新历史@记录
4、把历史@记录转为JSON存到SP中

private void updateRecentAtUser(User item) {
    mAtUserHistoryList.remove(item);
    mAtUserHistoryList.add(0, item);
    mAtUserHistoryStr = JSON.toJSONString(mAtUserHistoryList);
    SPUtils.getInstance().put(Consts.SP_KEY_AT_USER_HISTORY, mAtUserHistoryStr);
}

按照以上步骤写代码,写完后,运行程序却发现removeAll并没有生效,调试了下返回值为false。百思不得姐,于是就上网搜索了一下,如何使用Java List等集合类的removeAll方法 (⊙﹏⊙)b 呵呵、前段时间同事还问我重写equals方法的问题呢,这会儿自己居然忘记重写了。

在此记录一下

在执行removeAll方法时是通过equals方法来判断集合元素是否相等的,如果没有Override equals方法,其默认的仍是比较对象,所以会出现上述问题!

归根到底,还是基础没有掌握牢固,同时也给自己提了个醒,写实体类时尽量Override hashCode和equals方法,不这样说不定哪天就会出问题。

问题综述完毕,当然,这个问题实质上很简单,只希望给遇到有同样疑问的朋友一点帮助。

贴上代码:

public class User extends Model implements Serializable {
    // uid 用户id (ActiveRecord内部已占用了id字段)
    @Column(unique = true, onUniqueConflict = Column.ConflictAction.REPLACE)
    public long uid;
    @Column
    public String name;
    @Column
    public int countAnswer;//回答次数
    @Column
    public int countVote;// 被赞次数
    @Column
    public int countFocused;// 粉丝数
    @Column
    public boolean focusedByMe;// 我是否关注了此用户
    @Column
    public boolean focusingMe;// 此用户是否关注了我
    public String signature;// 用户个性签名
    //每个ActiveRecord model都必须有默认构造函数
    public User() {super();}
    public User(long uid,String name){
        super();
        this.uid = uid;
        this.name = name;
    }
    //重写equals方法
    @Override
    public boolean equals(Object o) {
        return o instanceof User
                && this.uid == ((User)o).uid
                && this.name.equals(((User)o).name);
    }
}

你可能感兴趣的:(关于List时removeAll()注意事项)