Group有一个存放person的list。我想判断某个person是否属于Group组的时候,我用到了contains。但是程序总是返回false。有些不解,希望大家讲讲是什么原因导致。谢谢大家
//GROUP添加person集合
List personnels = new ArrayList();
String[] arr = request.getParameterValues("personnelId");
if (arr != null) {
for (int i=0; i<arr.length; i++) {
Personnel person = ShiftManager.instance().getPersonnel(arr[i]); //根据编号获得person对象
personnels.add(person); //添加至集合
}
}
ShiftManager.instance().saveShiftGroup(group); //添加班组对象//在页面中
//gtemp就是获得的班组对象
Iterator ite = personnels.values().iterator(); //personnels是查询出来的所有用户
while (ite.hasNext()) {
Personnel p = (Personnel)ite.next();
Map g = ShiftManager.instance().queryShiftGroups(p.getId());
Iterator i = g.values().iterator();
while (i.hasNext()){
ShiftGroup gtemp = (ShiftGroup) i.next();
if (gtemp.getPersonnels().contains(p)){ //这里就一直返回false,获取不到group的名字
gname += gtemp.getName()+" ";
}
}
}
//GROUP添加person集合
List personnels = new ArrayList();
String[] arr = request.getParameterValues("personnelId");
if (arr != null) {
for (int i=0; i<arr.length; i++) {
Personnel person = ShiftManager.instance().getPersonnel(arr[i]); //根据编号获得person对象
personnels.add(person); //添加至集合
}
}
ShiftManager.instance().saveShiftGroup(group); //添加班组对象//在页面中
//gtemp就是获得的班组对象
Iterator ite = personnels.values().iterator(); //personnels是查询出来的所有用户
while (ite.hasNext()) {
Personnel p = (Personnel)ite.next();
Map g = ShiftManager.instance().queryShiftGroups(p.getId());
Iterator i = g.values().iterator();
while (i.hasNext()){
ShiftGroup gtemp = (ShiftGroup) i.next();
if (gtemp.getPersonnels().contains(p)){ //这里就一直返回false,获取不到group的名字
gname += gtemp.getName()+" ";
}
}
}
public boolean contains(Object elem) {
return indexOf(elem) >= 0;
}
public int indexOf(Object elem) {
if (elem == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (elem.equals(elementData[i]))
return i;
}
return -1;
}
Personnel 类你应该没有重写equals方法吧!
ArrayList 中的contains方法会调用这行代码
if (o.equals(elementData[i]))
而这个时候是调用Object的
public boolean equals(Object obj) {
return (this == obj);
}
方法,这样肯定不成功的了