仰望星空
分类: Java
2016-04-20 22:26:39
一、什么是HashSet
HashSet实现了Set接口,在他的集合中不允许有重复的对象,想要存储对象到HashSet之前必须覆写equals()和hashCode()接口,否则无法实现比较两个对象是否相等,以及是否重复了。HashSet()使用public boolean add(Object o)的方法在Set中添加元素,当对象重复时会返回一个false。
二、什么是HashMap
HashMap实现了Map接口,Map接口对key和value进行映射,Map中不存在重复的key,Map接口有两个基本实现TreeMap和HashMap 其中TreeMap的实现对象保存时的次序,HashMap不能。HashMap是非synchronized,但Collection架构提供方法保证HashMap的Synchronized,当多线程访问HashMap时,只有一个线程能更改Map。
下面是HashSet的代码,其覆写了hashCode()和equals()方法,如果不覆写任意其中一个,那么相同的对象会有不同的hash值,也就是说HashSet中将会有重复的对象了。
package HashTest;
import java.util.HashSet;
import java.util.Iterator;
class Boy2 {
private int age;
private String name;
public Boy2(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public int hashCode(){
return this.name.hashCode()+age;
}
/*public boolean equals(Object obj) {
Boy2 b=(Boy2) obj;
boolean result=this.age==b.age&&this.name.equals(b.name);
return result;
} */
//屏蔽上面的equals()或者hashCode()方法将会使对象重复
@Override
public String toString() {
return "boy3 [age=" + age + ", name=" + name + "]";
}
}
public class HashTest1 {
public static void main(String args[]){
Boy2 b1 = new Boy2(43, "zhangsan");
Boy2 b2 = new Boy2(33, "lisi");
Boy2 b3 = new Boy2(55, "wangwu");
Boy2 b4 = new Boy2(43, "zhangsan");
HashSet hashset = new HashSet();
hashset.add(b1);
hashset.add(b2);
hashset.add(b3);
hashset.add(b4);
Iterator iterator = hashset.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}