1有道面试题:object 下的方法
2 object基本api
重要细节1 equal == 的区别,如何重写equal
2 如何来筛选避免list重复
3 附上完整的student类
1有道面试题:object 下的方法
1 equals(): 和 == 作用相似
2 hashCode():用于哈希查找,重写了equals()一般都要重写该方法 ,注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值。
3 getClass(): 获取Class对象
4 wait():让当前线程进入等待状态,并释放它所持有的锁
5 notify()¬ifyAll(): 唤醒一个(所有)正处于等待状态的线程
6toString():转换成字符串
7 public static String toHexString(int i):把一个整数转成一个十六进制表示的字符串
引申:equals()和==的不同、在synchronized 同步代码块里wait()和notify()¬ifyAll()如何配合、hashCode()和equals()的关系、获取Class对象还有什么方法
Student s = new Student();
System.out.println(s.hashCode());
System.out.println(s.getClass().getName());
System.out.println("--------------------");
System.out.println(s.toString());// cn.bingley.Student@42552c
System.out.println("--------------------");
// toString()方法的值等价于它
// getClass().getName() + '@' + Integer.toHexString(hashCode())
// this.getClass().getName()+'@'+Integer.toHexString(this.hashCode())
2 如何来筛选避免list重复
除了重写equal方法还要重写hashcode 方法
再结合set工具类才能有效
public static void removeDuplicateWithOrder(List list) {
Set set = new HashSet();
List newList = new ArrayList();
for (Iterator iter = list.iterator(); iter.hasNext();) {
Object element = iter.next();
if (set.add(element))
newList.add(element);
}
list.clear();
list.addAll(newList);
}
3 Object的equal()和==的区别?
参考回答:
equals():是Object的公有方法,具体含义取决于如何重写,比如String的equals()比较的是两个字符串的内容是否相同
“==” :对于基本数据类型来说,比较的是两个变量值是够是否相等,对于引用类型来说,比较的是两个对象的内存地址是否相同
附上完整的student类
1 name是String类型的,而String是引用类型的,所以,在这里不能直接用==比较,应该用equals()比较(用的是String类里面的equals()方法,且比较的是值内容,不是地址)
//String的equals()方法是重写自Object类的,比较的是字符串的内容是否相同
2 先判断一下,obj是不是学生的一个对象,如果是,再做向下转型,如果不是,直接返回false。
这个时候,我们要判断的是对象是否是某个类的对象?
记住一个格式:对象名 instanceof 类名
表示:判断该对象名是否是该类名一个对象
public class Student {
private long id;
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
//为了提高效率
if (this == obj) {
return true;
}
if (!(obj instanceof Student)) {
return false;
}
Student s = (Student) obj;
return this.name.equals(s.name) && this.age == s.age;
}
@Override
public int hashCode() {
return getId() != null ? getId().hashCode() : 0;
}
}