1.HashSet特点
- HashSet线程不安全,存取速度快,保证元素的唯一性是通过覆盖掉Object里面的hashCode()方法和equals()方法实现的。
- HashSet是基于Hash算法实现的,性能通常优于TreeSet,So通常使用HashSet。
2.关于hashCode()方法和equals()方法
- 需要先用hashCode()对比,
- 若不一样,则这两个肯定不等,不必再用equals().
- 若hashCode()相同,再对比equals(),如果equals()也相同,则两个对象真的相同
package gather;
import java.util.HashSet;
import java.util.Iterator;
public class HashCodeDemo {
public static void main(String[] args) {
HashSet<student> h = new HashSet<student>();
h.add(new student("张三"));
h.add(new student("张三"));
h.add(new student("李四"));
//因为h里面存放的是student这个对象,所以直接打印出来的是地址
System.out.println(h);
Iterator<student> i = h.iterator();//迭代器
while (i.hasNext()) {
student ob = i.next();
System.out.println(ob.name);
}
}
}
class student{
String name;
public student(String name){
this.name=name;
}
/*
* (non-Javadoc)
* @see java.lang.Object#hashCode()
* 需要先用hashCode()对比,
* 若不一样,则这两个肯定不等,不必再用equals().
* 若hashCode()相同,再对比equals(),如果equals()也相同,则两个对象真的相同
*/
public int hashCode(){
int num = name.hashCode();
System.out.println("---hashCode---");
return num;
}
public boolean equals(Object obj) {
System.out.println("---equals---");
return true;
}
}