public class TestHashSet{
public static void main(String args[]){
s.add(new Name("firstName1","lastName1"));
s.add(new Name("firstName2","lastName2"));
s.add(new Name("firstName","lastName"));
Iterator it=s.iterator();
System.out.println(it.next());
s1.add(new Name("firstName","lastName"));
s1.retainAll(s);
//取两个容器的交集
su.add(s); //将一个容器添加到另一个容器中
Iterator its=su.iterator();
//这里循环只能循环su内部的元素,至于被添加进来的s容器的内容只会当做整体循环出来
System.out.println(its.next());
}
Name(String firstName,String lastName){
this.firstName=firstName;
二、HashSet实例2
public class TestHashSet{
public static void main(String args[]){
s.add(new Name("firstName1","lastName1"));
s.add(new Name("firstName2","lastName2"));
s.add(new Name("firstName","lastName"));
Iterator it=s.iterator();
System.out.println(it.next());
s1.add(new Name("firstName","lastName"));
Iterator its=su.iterator();
System.out.println(its.next());
System.out.println("-------------------------------------------------");
List ll=new LinkedList();
ll.add(new Name("karl","smish"));
ll.add(new Name("karl","jack"));
ll.add(new Name("adiwa","smish"));
ll.add(new Name("susan","clerk"));
class Name implements Comparable{
Name(String firstName,String lastName){
this.firstName=firstName;
public String getFirstName(){
public String toString(){
return firstName+lastName;
public String getLastName(){
return this.firstName.hashCode();
public boolean equals(Object obj){
Name name=(Name)obj;
//这里调用了String类的equals方法,因为String重写了equals方法
return firstName.equals(name.firstName)&&lastName.equals(name.lastName);
return false;//return super.equals(obj)
public int compareTo(Object obj){
//返回值为int类型
//if(obj instanceof Name){
// if(firstName==name.firstName&&lastName==name.lastName) return true;
int lastCmp=lastName.compareTo(name.lastName);
//相等返回0,大于返回1,小于返回-1
return lastCmp!=0?lastCmp:firstName.compareTo(name.firstName);
总结:
1、HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。
2、对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成。
3、对于HashSet中保存的对象,请注意正确重写其equals和hashCode方法,以保证放入的对象的唯一性。