最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
本篇介绍两个内容,首先来说一下hashCode和equals方法:
一般情况下不需要重写hashCode和equals方法。
示例代码:
import java.util.Date;
public class Student extends Object{
private Integer id;
private String name;
private Date birthday;
@Override//(通过Eclipse自动生成的,根据id做一个散列算法)
public int hashCode() {
final int prime = 31;//常常取一个质数
int result = 1;
result = prime * result + id;
return result;
}
@Override//自动生成的
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestEquals {
public static void main(String[] args) {
List list = new ArrayList(); //它是有序可重复的,equals方法返回true表示可重复,所以s1和s2都能放进去
Integer s1 = new Integer(243);
Integer s2 = new Integer(243);
list.add(s1);
list.add(s2);
System.out.println(list.size()); //会返回2
Map map = new HashMap();
//键不能重复,即equals方法返回的为true则表示重复,则发生覆盖
map.put(s1, "AAAA");
map.put(s2, "BBBBBB");
System.out.println(map.get(243));//发生覆盖,返回BBBBBB
}
}
接下来简单介绍一下set接口,set接口的实例容器hashSet的底层是通过hashMap来实现的,所以说他们其实没有太大的差别:
下面是set的几个常见方法的介绍:
import java.util.HashSet;
import java.util.Set;
/**
* 测试Set的常用方法!
*/
public class TestSet {
public static void main(String[] args) {
Set set = new HashSet();
set.add("aaa");
set.add("bbb");
set.add(new String("aaa"));
System.out.println(set.size());
System.out.println(set.contains("aaa"));
set.remove("aaa");
}
}