特点:
1.无序
2.元素唯一
package chapter09;
import java.util.HashSet;
import java.util.Set;
public class HashDemo {
public static void main(String[] args)
{
HashDemo h=new HashDemo();
h.HashTest();
}
public void HashTest(){
//首先调用对象所在类的hashcode()方法,计算对象的hash值,hash值决定了对象在set集合中的位置,
//如果位置没有对象,则存储;如果有对象,则比较equals方法来比较
//如果equals方法比较相等,不再存储,如果不相等存set集合的下一位
Set s=new HashSet();
s.add("aa");
s.add("aa");
s.add("aa");
s.add("aa");
System.out.println(s.size());
}
}
package chapter09;
import java.util.HashSet;
import java.util.Set;
public class HashDemo {
public static void main(String[] args)
{
HashDemo h=new HashDemo();
h.HashTest();
}
public void HashTest(){
Set s=new HashSet();
s.add("aa");
s.add("aa");
s.add("aa");
s.add("aa");
s.add(new PersonDemo1("zs",20));
s.add(new PersonDemo1("zs",20));
System.out.println(s.size());
}
}
因为每次new的PersonDemo1类对象所在的地址并不同,所以算不同元素,若要进行按照人们的思想来分,要重写hashcode和equals方法
package chapter09;
import java.util.HashSet;
import java.util.Set;
public class PersonDemo1 {
private String name;
private int age;
//添加get|set方法快捷键 ALT+SHIFT+S+R
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;
}
//添加有参构造函数 快捷键 ALT+SHIFT+S+O
public PersonDemo1(String name, int age) {
super();
this.name = name;
this.age = age;
}
//添加构造函数 快捷键 ALT+SHIFT+S+C
public PersonDemo1() {
super();
// TODO Auto-generated constructor stub
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return 1;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
PersonDemo1 per=(PersonDemo1)obj;
if(per.age!= this.age)
return false;
else
return true;
}
}
public class HashDemo {
public static void main(String[] args)
{
HashDemo h=new HashDemo();
h.HashTest();
}
public void HashTest(){
Set s=new HashSet();
s.add("aa");
s.add("aa");
s.add("aa");
s.add("aa");
s.add(new PersonDemo1("zs",20));
s.add(new PersonDemo1("zs",20));
System.out.println(s.size());
}
}
一般情况下,hashcode与equals方法的判断标准要保持一致