java ArrayList的contains方法問題

   arrayList的contains方法比較是否包含元素的時候,調用的是 對象的equals方法,也就是說如果對象沒有重寫equals方法,那麼其實比較的事堆中的地址是否相等了。

下面是 contains方法的源碼。

  1. public boolean contains(Object o) {   
  2.     return indexOf(o) >= 0;   
  3.     }   
  4.   
  5.   
  6.  public int indexOf(Object o) {   
  7.     if (o == null) {   
  8.         for (int i = 0; i < size; i++)   
  9.         if (elementData[i]==null)   
  10.             return i;   
  11.     } else {   
  12.         for (int i = 0; i < size; i++)   
  13.         if (o.equals(elementData[i]))   
  14.             return i;   
  15.     }   
  16.     return -1;   
  17.     }  
故要調用list的contains方法的時候,如果比較的對象的並非出自同一內存塊,則需覆蓋對象的equals方法。


public boolean equals(Object arg0) { 
		if (arg0 != null && arg0 instanceof UserInfo) { 
		return this.getId().equals(((UserInfo) arg0).getId()); 
		} 
		return false; 
		} 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章