HashSet是set接口的实现类:
HashSet类是Set接口的典型实现类不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变
它们的hashCode()方法返回值不相等, HashSet将会把它们存储在不同的位置, 依然可以添加成功。
HashSet不是同步的
方法摘要
add(E e)
如果此 set 中尚未包含指定元素,则添加指定元素。
clear()
从此 set 中移除所有元素。
clone()
返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。
contains(Object o)
如果此 set 包含指定元素,则返回 true。
isEmpty()
如果此 set 不包含任何元素,则返回 true。
Iterator
返回对此 set 中元素进行迭代的迭代器。
remove(Object o)
如果指定元素存在于此 set 中,则将其移除。
size()
返回此 set 中的元素的数量(set 的容量)。
代码:
import java.util.HashSet;
import java.util.Iterator;
public class myHSetClass {
public static void main(String[]args){
HashSet hset=new HashSet();
//add()向hist集合添加自定义对象元素
hset.add(new Person(1,"A1"));
hset.add(new Person(2,"A2"));
hset.add(new Person(3,"A3"));
hset.add(new Person(4,"A4"));
hset.add(new Person(4,"A4"));
// 返回对此 set 中元素进行迭代的迭代器
Iterator it=hset.iterator();
//
while(it.hasNext()){
Person p=(Person)it.next();
//打印集合集合里的元素
System.out.println(p.getAger()+","+p.getName());
}
//size 获取元素个数
System.out.println("HashSet的元素格个数:"+hset.size());
//contains判断 HashSet中是否包含某个元素
System.out.println("HashSet中是否包含某个元素:"+hset.contains(new Person(4,"A4")));
//remove 删除对象
System.out.println("是否删除成功:"+ hset.remove(new Person(1,"A1")));
System.out.println("删除后的集合");
//删除后的集合
while(it.hasNext()){
Person p=(Person)it.next();
//打印集合集合里的元素
System.out.println(p.getAger()+","+p.getName());
}
}
}
class Person{
private String name;
private int age;
//创建添加元素构造器
Person(int age,String name){
this.name=name;
this.age=age;
}
public String getName(){
return name;
}
public int getAger(){
return age;
}
public int hashCode(){
System.out.println(this.name+"....hasCode");
//乘4是为了尽量保证哈希值的唯一
return name.hashCode()+age*4;
}
public boolean equals(Object obj){
//判断哈希值是否相同
if(!(obj instanceof Person)){
return false;
}
//
Person p=(Person)obj;
//打印比较次数
System.out.println(this.name+"...equals.."+p.name);
return this.name.equals(p.name) && this.age==p.age;
}
}
效果:
说明:HashSet判断元素是否相等的依据:对象的equals()比较返回false;且hashCode值不 相等,
判断两个元素不相等,无论添加,删除操作时都是先判断哈希值是否相同如果哈希值不同再调用equals方法判断值是否相同。
但是它们的hashCode()方法返回值不相等, HashSet将会把它们存储在不同的位置,依然可以添加成功。