List Contains方法使用问题
2017-11-09 17:22
316 查看
今天在用ArrayList类的contains方法是遇到了问题,我写了一个存放User类的ArrayList 但在调用list.contains(对象)时总是返回false。 去看了下ArrayList的源码,源码如下:
Java代码
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
发现在contains方法会调用 o.equals(elementData[i])方法,其中elementData[i]是个object类的实例。也就是说我在调用list.contains(user)时实际上比较的是user.equals(object) 这当然会返回false。
所以要使用对比一些对象的时候要对该对象的equals方法重写,且list的constains方法的效率不高,建议使用hashset的constains方法
Java代码
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
发现在contains方法会调用 o.equals(elementData[i])方法,其中elementData[i]是个object类的实例。也就是说我在调用list.contains(user)时实际上比较的是user.equals(object) 这当然会返回false。
所以要使用对比一些对象的时候要对该对象的equals方法重写,且list的constains方法的效率不高,建议使用hashset的constains方法
相关文章推荐
- List的All方法使用问题:我用List1的All方法来确保List1的所有每个数组元素中是否包含Arr1中的任意元素,这个部分很难实现。 因为,没有一个数组中是否包含另一个数组中的任意元素这个功能
- List使用add方法添加数据时的覆盖问题
- List 中的 list.contains(o)方法的使用
- 使用List的remove方法需要的注意的问题
- List使用add方法添加对象问题
- List使用add方法添加数据时的覆盖问题
- 问题-Delphi 中使用TStringList后,报out of memory 的解决方法
- List集合中的contains方法使用
- 使用List中remove方法时需要注意的问题
- Symbian S60开发,在SettingList中使用RadioButton的问题及解决方法。
- List使用add方法添加对象-只显示最后添加的数据的问题
- 关于List的contains方法问题
- List的toArray方法的使用方法以及强制转换时的报错问题
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- iOS开发使用 runtime 方法中的 class_copyIvarList,class_copyMethodList 方法时导致内存泄漏问题
- List与Set的contains方法效率问题
- linux上,mysql使用聚合函数group by 时报错:SELECT list is not in GROUP BY clause and contains nonaggre的问题
- 使用List的Remove方法时想起的小问题
- list.contains()方法的使用
- List的Contains使用方法