HashSet是实现Set接口的Hash表,HashSet里面的元素是唯一的,不可重复,HashSet通过计算元素的hashCode来判断表内是否已经存在相同元素,如果已存在,则不再添加.如果存储的是自定义对象,必须重写该对象的equals和hashCode方法 .Iteartor中文名叫迭代器,可以访问实现collection接口的对象,只有三种方法:hasNext(),next(),remove(),分别判断后面是否还有元素,移动到下一元素,移除当前元素.范例:
package com.pocketdigi;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class Main {
static ArrayList list;
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet hs=new HashSet();
hs.add(new People(1,"zhang"));
hs.add(new People(2,"wang"));
hs.add(new People(3,"li"));
hs.add(new People(1,"zhang"));
//HashSet不允许重复的元素,这里id 1 name zhang重复了
//但是默认情况下HashSet是计算该元素内存的HashCode来确定是否同一元素的
//所以默认情况下上面的代码添加了4个元素
//必须重写People的类equals和hashCode方法来帮助HashSet判断是否属于同一元素,重写hs里只有3个元素
Iterator it=hs.iterator();
//HashSet没有取出元素的方法,只能用迭代器
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class People{
int id;
String name;
People(int id,String name){
this.id=id;
this.name=name;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
People p=(People)obj;
return id==p.id&&name.equals(p.name);
//重写equals方法,对比id和name
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return id;
//直接返回id作hashCode,必须保证每个对象的id唯一
}
public String toString(){
return "id:"+id+" name:"+name;
}
}