java集合(HashSet)

来源:互联网 发布:adobe软件 mac百度云 编辑:程序博客网 时间:2024/06/04 18:42
import java.util.HashSet;
import java.util.Iterator;


/*
 * !--Set:元素是无序(存入和取出的顺序不一定一致)元素不可以重复。
 * !--HashSet:底层数据结构是哈希表。
 * !--TreeSet:
 * Set集合的功能和Collection是一致的。
 * 哈希表:按照哈希值来存储,元素的哈希值相同,则比较元素的内容是否相同,一个hash值可以顺延存储很多元素。

 */


class Demo{
//自定义哈希值
public int hashCode()
{
return 60;
}

}


public class SetDemo {

public static void main(String[] args) {


/*Demo d1=new Demo();
Demo d2=new Demo();
//输出对象的哈希值
sop(d1);

sop(d2);*/



//定义HashSet容器
HashSet ha=new HashSet();
//添加元素,输出添加方法的(boolean)返回值。
sop(ha.add("java01"));
sop(ha.add("java01"));
ha.add("java02");
ha.add("java02");
ha.add("java03");

ha.add("java04");



//定义ha的迭代器
Iterator it=ha.iterator();
//输出容器元素
while (it.hasNext())
{
sop(it.next());

}


}


public static void sop(Object obj)
{
System.out.println(obj);

}


}



/*
 *HashSet是如何保证元素的唯一性:
 *1.通过两个方法,hashCode和equals来完成。
 *如果元素的HashCode值相同,才会判断equals是否为true。
 *如果元素的hashCode值不同,才会调用equals。
 *尽量保证hash值得唯一性。
 *当往HahsSet里面添加元素时,集合底层会自动调用hashCode和equals方法。 
 *HashSet的判断和删除都是依赖于hashCode和equals方法。 先比较哈希值,再调用equals方法。

 */


import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args)

{


//定义一个HashSet容器
HashSet hs=new HashSet();
//添加元素
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
// hs.add(new Person("a1",11));

//hs.add(new Person("a4",14));


//判断容器食肉包含某对象

//sop("a1:"+hs.contains(new Person("a2",12)));


//删除某对象

sop("a1:"+hs.remove(new Person("a2",12)));


//定义hs的迭代器
Iterator it=hs.iterator();

while (it.hasNext())
{
//向下转型,让obj能调用Person的方法。
Person p=(Person) it.next();
sop(p.getName()+"--"+p.getAge());

}


}


public static void sop(Object obj)
{
System.out.println(obj);

}


}






//定义一个Person类
class Person{
//定义私有变量name和age
private String name;
private int age;
//定义Person的有参构造函数,并且对私有成员变量进行初始化。
Person(String name,int age)
{
this.name=name;
this.age=age;
}
//复写hashCode方法
public int hashCode(){
System.out.println(this.name+"--hashCode");
return name.hashCode()+age;
}
//复写equals方法
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==this.age);
}
//为私有成员提供对外访问方式
public String getName()
{
return  name;
}
//为私有成员提供对外访问方式
public int getAge()
{
return age;
}
}


0 0
原创粉丝点击