HashSet和Iterator的使用

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;
	}
}

© 2011, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记