集合框架_Collection_Set_HashSet
来源:互联网 发布:远程wifi控制软件 编辑:程序博客网 时间:2024/06/05 01:59
Set:元素不可以重复,是无序。
Set接口中的方法和Collection一致。
|--HashSet: 内部数据结构是哈希表 ,是不同步的。
在往HashSet集合中添加元素前要判断元素是否相同,哈希表如何确定元素是否相同?
1.判断两个元素的哈希值是否相同,如果不同,就不判断内容;如果相同,再判断两个对象的内容是否相同
2.判断哈希值相同,其实判断的是对象的hashCode的方法;判断内容相同,用的是equals方法。
如何保证该集合的元素唯一性呢?
是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
记住:如果元素要存储到HashSet集合中,必须在定义该元素的时候覆盖hashCode方法和equals方法。为什么?
Object类有hashCode()和equals()方法,不同数据(也许是为了达到相同的效果或表象)根据自身数据结构的特点定义了新的hashCode()和equals()方法来覆盖了父类的这两个方法。如果自己定义了新的类,为了达到相同或者不同的效果,那么通常都需要覆盖父类中的hashCode()和equals()方法。
比如,如果定义的类会产生很多对象,如人,学生,书,通常都需要覆盖equals,hashCode方法。建立对象判断是否相同的依据。
HashSet集合数据结构是哈希表,所以存储元素的时候,使用的元素的hashCode方法来确定位置,如果位置相同,再通过元素的equals来确定是否相同。
如果new一个Person添加一个的话,因为地址不同,即使两个Person里面的内容相同,默认的HashSet会认为是不同的,这时候就应该在建立Person的时候重写Person里面的hashCode和equals方法。简单的方法是根据对象中属性所属的数据类型来重写hashCode和equals方法,可以运用该属性所属类的hashCode和equals方法,如return name.hashCode()+age*38。这中写法中,地址是通过属性的一些简单计算得到的,这样属性(内容)相同,地址就相同了。
HashSet的子类LinkedHashSet是有序的,比如 HashSet hs=new LinkedHashSet;往hs存储都是有序的。
所以Set和List最主要的区别是存储的元素相同不相同。
- 集合框架_Collection_Set_HashSet
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 在windows下使用insight实现源码级调试 linux内核!
- 红黑树(一)
- java所谓的闭包与回调
- cocos2d-x使用cocosbuilder简介(持续修正)
- 周鸿祎:与88后的座谈,关于职业发展
- 集合框架_Collection_Set_HashSet
- JAVA集合的并发
- select模型讲解
- struts2 返回类型配置
- webkit中 html的解析及dom树和render树的生成 .
- oracle中约束和索引的前后关系
- cadence 焊盘制作
- 矩阵分解与推荐系统
- Shell脚本语法