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()+" ";
      }
  }

解决方案 »

  1.   

    看下ArrayList的源码,如下:
    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;
        }
      

  2.   


    Personnel 类你应该没有重写equals方法吧!
    ArrayList  中的contains方法会调用这行代码   
    if (o.equals(elementData[i]))
     而这个时候是调用Object的
     public boolean equals(Object obj) {
    return (this == obj);
        }
    方法,这样肯定不成功的了