ArrayList的contains问题
ArrayList的contains判断居然不准确,根本不是要的结果。关键还是想当然了。
ArrayList.contains(Object o) 的工作原理是:
遍历列表中的每个元素,通过调用 element.equals(o) 来判断是否存在匹配元素。
如果元素类没有重写 equals(),会默认使用 Object 类的 equals() 实现,而 Object.equals() 本质是比较两个对象的内存地址(即 == 运算)。即使两个对象的内容完全相同(字段值一致),只要是不同的内存对象,contains() 也会返回 false,造成 "判断不准确" 的错觉!
所以核心的关键是要重新equals(),在里面根据关键字来判断(以角色对象为例):
@Override public boolean equals(Object o) {if (this == o) return true; // 同一对象直接返回trueif (o == null || getClass() != o.getClass()) return false; // 类型不同返回falseRoleInfoBO role = (RoleInfoBO) o;return this.roleId.equals(role.getRoleId()); // 比较字段 }