--------------android培训、java培训、期待与您交流!---------------------
特性:元素存放无序,且元素值唯一
原理:由于底层元素存放结构是哈希表结构,所以是无序的,当新的元素存放的时候,会调用该元素的hashCode()计算出一个哈希值,然后去和集合中的原有元素的哈希值比较,如果相同,则调用元素的equals()进行内容的比较,内容不同则会在同一哈希值下按顺序依次排列存储,如果内容也相同则不会存储,以保证元素的唯一性
实例:往HashSet中存入自定义对象
代码:
package com.itheima;
import java.util.HashSet;
import java.util.Iterator;
class Person {
private String name;
private int age;
public Person(String name,int age){
this.setName(name);
this.setAge(age);
}
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;
}
public int hashCode(){
int hCode = name.hashCode()+age*39;
System.out.println(this.name+"---hashCode---"+hCode);
return hCode;
}
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;
}
}
public class HashSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet hs = new HashSet();//创建一个HashSet对象
hs.add(new Person("zhangshan",18));//添加元素(存储)
hs.add(new Person("lisi",20));
hs.add(new Person("wangwu",19));
hs.add(new Person("zhaoliu",18));
hs.add(new Person("lisi",20));
System.out.println("------------------------");
Iterator it = hs.iterator();
while(it.hasNext()){//循环打印元素
Person p = (Person)it.next();
System.out.println(p.getName()+"----"+p.getAge());
}
}
}