HashSet简单介绍
来源:互联网 发布:阿里云校园 编辑:程序博客网 时间:2024/05/18 01:07
java.lang.Object
|_ java.util.AbstractCollection<E>
|_ java.util.AbstractSet<E>
|_ java.util.HashSet<E>
HashSet中不允许有重复的元素。例如:
Set hashSet = new HashSet();
hashSet.add(new String("aaa"));
hashSet.add(new String("bbb"));
hashSet.add(new String("ccc"));
hashSet.add(new String("aaa"));
hashSet.add(new String("aaa"));
通过hashSet.size()获取它含有元素的个数,上面去掉重复的元素后,hashSet.size()=3。也就是说,在向HashSet中添加(add())元素的时候,对于重复的元素,只在HashSet中保留一个副本。
另外,HashSet中元素的顺序是随机的,包括添加(add())和输出都是无序的。
对HashSet集合的一些常用操作:
add(Object) :添加元素(Object);
addAll(Collection) :向HashSet中添加一个集合(Collection);
remove(Object) :删除一个指定的元素(Object);
removeAll(Collection) :删除一个指定的集合(Collection);
size() :HashSet的容量,即HashSet内元素的个数;
isEmpty() : 判断HashSet是否为空,即[]或size()=0,返回true或false;
contains(Object) :判断某个元素(Object)是否在HashSet中,返回true或false;
containsAll(Collection):判断HashSet是否包含某个集合(Collection);
clear() :清空HashSet,使得size()=0;
toArray() :将HashSet转换成一个Object[];
iterator() :构造一个HashSet迭代器,用于输出HashSet中的元素
使用迭代器输出HashSet中的元素,例如:
Iterator it = hashSet.iterator();
while(it.hasNext()){
System.out.println((String)it.next());
}
假设有一个Person类:
class Person{
private String name;
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
构造两个Person的实例:
Person p1 = new Person();
p1.setName("shirdrn");
p1.setAge(new Integer(26));
Person p2 = new Person();
p2.setName("shirdrn");
p2.setAge(new Integer(26));
加入到HashSet中:
Set hashSet = new HashSet();
hashSet.add(p1);
hashSet.add(p2);
按理说,加入的这两个Person实例是相同的,HashSet应该只选择一个添加到集合里面。其实不然,此时的hashSet.size()=2。
这主要是由于Object拥有hashCode()和equals()两个方法,它认为具有相同的hashcode的对象才是同一个对象,即对同一个对象的引用。
所以必须在对应的实体类中重写hashCode()和equals()两个方法。在Person类中重写hashCode()和equals()两个方法,如下所示:
public boolean equals(Object o){
if(this == o){
return true;
}
if(! (o instanceof Person)){
return false;
}
final Person other = (Person)o;
if(this.name.equals(other.getName()) && this.age.equals(other.getAge())){
return true;
}
else{
return false;
}
}
public int hashCode(){
int result;
result = (name == null?0:name.hashCode());
result = 37*result + (age == null?0:age.hashCode());
return result;
}
这时,再进行上面的测试,发现hashSet.size()=1。此时,对象p1和p2具有相同的hashcode,HashSet认为添加的两个Person实例是同一个对象,只把一个添加到集合里面。
这在Hibernate中非常关键
- HashSet简单介绍
- 介绍HashSet
- 介绍HashSet .
- HashSet介绍
- HashMap、HashTable、HashSet分析比较以及TreeSet的简单介绍
- HashSet简单示例
- HashSet简单用法
- HashSet集合简单使用
- HashSet简单实现
- HashSet与TreeSet的介绍
- java的HashSet的介绍
- 简单实现java中的HashSet
- java HashSet源码简单剖析
- C# HashSet集合类型使用介绍
- java中HashSet介绍与demo
- HashSet
- Hashset
- HashSet
- 操纵记录类型
- java-用HttpURLConnection发送Http请求.
- java-下载图片(正则表达式、HttpURLConnection、流、socket综合运用)
- tomcat服务器安装、配置及使用.
- Servlet接口中的各方法的生命周期及读取web.xml的配置信息
- HashSet简单介绍
- java-servlet、DOM、html综合运用示例
- servlet知识点回顾
- MySQL中的integer 数据类型
- MySQL详细安装图文教程
- MySQL登陆方式、数据类型、数据引擎及SQL查询语句,注意的问题.
- java中的el——表达式语言
- java-例子:MVC模式,用jstl和el输出数据到jsp页面.
- 功率谱密度