Contains方法,使用equals方法判断,所以要重写对象的equals方法,来定义是否相等
判断List中课程是否存在
equals方法重写:
public boolean equals(object obj){
if(this == obj){
return true;
}
if(obj == null)
return false;
if(!(obj instanceof Course))
return false;
Course course = (Course) obj;
if(this.name==null){
if(course.name==null)
return true;
else
return false;
}else{
if(this.name.equals(course.name))
return true;
else
return false
}
}
查询是否存在:Collection的contains() / containsAll()方法
equals和==的区别 == : 如果作用于基本数据类型,则比较的是值是否相等; 如果作用于引用类型,则比较的是变量所指向的对象的地址 equals : 对于非String、Date类型equals比较的是引用类型的变量所指向的对象的地址 但对于String、Date类型,在其类中重写了equals(),所以比较的是值 Object类型相等判断为什么重写equals()和hashcode() equals()方法是比较两个对象的内存地址是否相等,如果不重写,显然两个对象由于不同存储地址所以是不相等的
总结 :==符号在不作用于基本数据类型时,比较地址 equals在不作用于String,Data时候,比较地址
// equals和==的区别 //== //如果作用于基本数据类型,则比较的是值是否相等; //如果作用于引用类型,则比较的是变量所指向的对象的地址 //equals //对于非String、Date类型equals比较的是引用类型的变量所指向的对象的地址 //但对于String、Date类型,在其类中重写了equals(),所以比较的是值 //Object类型相等判断为什么重写equals()和hashcode() //equals()方法是比较两个对象的内存地址是否相等,如果不重写,显然两个对象由于不同存储地址所以是不相等的
//总结==符号在不作用于基本数据类型时,比较地址 //equals在不作用于String,Data时候,比较地址
这里重写equals只判断了name一个属性,需要判断更多的话在后面用&&连起来即可 public boolean equals(Object obj){ if(this == obj) return true; if(obj == null || getClass() != obj.getClass()) return false; Course course = (Course)obj; return Objects.equals(name,course.name); } 用containsAll()方法时,括号中的集合泛型也要跟检查的集合的泛型一致
equals和==的区别 //== //如果作用于基本数据类型,则比较的是值是否相等; //如果作用于引用类型,则比较的是变量所指向的对象的地址 //equals //对于非String、Date类型equals比较的是引用类型的变量所指向的对象的地址 //但对于String、Date类型,在其类中重写了equals(),所以比较的是值 //Object类型相等判断为什么重写equals()和hashcode() //equals()方法是比较两个对象的内存地址是否相等,如果不重写,显然两个对象由于不同存储地址所以是不相等的
//总结==符号在不作用于基本数据类型时,比较地址 //equals在不作用于String,Data时候,比较地址
public boolean equals(Obiect obj){ if(this==obj){ return true; } if(obj==null) return false; if(!(obj instanceof Course)) return false; Course course = (course)obj; if(this.name==null){ if(course.name==null) return true; else return false; }else{ if(this.name.equals(course.name)) return true; else return false; } }
List的contains方法的实现原理,如图。对List中的某个元素进行equals比较。
通过contains方法判断List中是否包含某个元素
需要再看看
-----------------------重写equals方法(固定模板)------------------
public boolean equals(Object obj){
//如果obj与比较对象的位置相同,说明obj是从集合中取出再与该位置 的元素比较,所以肯定相同
if(this==obj)
return true;
if(obj==null){//若字符串为空,则不能进行字符串比较,所以返回false
return false;
if(!(obj instanceof Course)){//若果obj当前类型不是Course,则当前两个对象肯定不相同
//instanceof 它的作用是判断其左边对象是否为其右边类的实例
return false;
//若上述均通过,则说明obj为Course对象,且当前对象不为空
Course course=(Course)obj;
if(this.name==null){
if(course.name==null)
return true;
else
return false;
}else{
if(this.name.equals(course.name))
return true;
else
return false;
}
}
重写equals判断比较详细的写法
集合的contains和containsAll方法可以判断集合中是否包含某个元素,可重写集合单元类的equals方法来修改判断的方式。
重写类的equals模版
这里需要以后再看
重写equals()方法
public boolean equals(Object obj){ if(this=== obj){ return true; } if(obj == null) return false; if(!(boj instanceof Course)) return false; Course course=(Course)obj; if(ths.name==null){ if(course.name==null) return true; else return false; }else{ if(this.name.equals(course.name)) return true; else return false; } }
contains(),containsAll()
override equals
重写 equals方法
contains方法原理,只要一个equals返回 true,contains就返回true
List中contains方法实现原理是,遍历每个List中的元素(Course),调用这些元素(Course)的equals方法和入参的对象进行比较,如果有一个返回真则这个contains方法返回真。
JAVA中equals与==的区别
“==” 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致。
equals方法是由Object类提供的,可以由子类来进行重写,默认的实现只有当对象和自身进行比较时才会返回true, 这个时候和 “==”是等价的。Java中很多类(String类 Date类 File类)等都对equals方法进行了重写。
contains()方法中调用了equals()方法。通过重写equals()方法拿到想要的值比较
疑问:该处.name要用equals()比较
list的contains方法,比较对象引用
也可重写对象的equals方法
80%
重写对象的equals方法
80%
Collection、Map结构
80%
接上
return true
else
return false
public boolean equals(Object obj){ if(this=== obj){ return true; } if(obj == null) return false; if(!(boj instanceof Course)) return false; Course course=(Course)obj; if(ths.name==null){ if(course.name==null) return true; else return false; }else{ if(this.name.equals(course.name)) return true; else return false; } }
先存在对象,才存在对象方法
instanceof 判断类型是否一致 需要判断的类 instanceof 指定的类