java.lang.Object
HashSet中不允许有重复的元素。例如:
Set hashSet = new HashSet();
通过hashSet.size()获取它含有元素的个数,上面去掉重复的元素后,hashSet.size()=3。也就是说,在向HashSet中添加(add())元素的时候,对于重复的元素,只在HashSet中保留一个副本。
另外,HashSet中元素的顺序是随机的,包括添加(add())和输出都是无序的。
对HashSet集合的一些常用操作:
add(Object)
addAll(Collection)
remove(Object)
removeAll(Collection) :删除一个指定的集合(Collection);
size()
isEmpty()
contains(Object)
containsAll(Collection):判断HashSet是否包含某个集合(Collection);
clear()
toArray()
iterator()
使用迭代器输出HashSet中的元素,例如:
Iterator it = hashSet.iterator();
假设有一个Person类:
class Person{
private String name;
private Integer age;
public Integer getAge() {
}
public void setAge(Integer age) {
}
public String getName() {
}
public void setName(String name) {
}
}
构造两个Person的实例:
Person p1 = new Person();
加入到HashSet中:
Set hashSet = new HashSet();
按理说,加入的这两个Person实例是相同的,HashSet应该只选择一个添加到集合里面。其实不然,此时的hashSet.size()=2。
这主要是由于Object拥有hashCode()和equals()两个方法,它认为具有相同的hashcode的对象才是同一个对象,即对同一个对象的引用。
所以必须在对应的实体类中重写hashCode()和equals()两个方法。在Person类中重写hashCode()和equals()两个方法,如下所示:
public boolean equals(Object o){
}
public int hashCode(){
}
这时,再进行上面的测试,发现hashSet.size()=1。此时,对象p1和p2具有相同的hashcode,HashSet认为添加的两个Person实例是同一个对象,只把一个添加到集合里面。
这在Hibernate中非常关键