/**
* @author StormWangxhu
* @version 创建时间:2017年11月4日 下午4:03:26
*
*/
Set集合
先来看看集合框架图:
- 与List接口相同点:
同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的增强,但比Collection接口更加严格! - 不同点
Set接口中的元素 无序、不重复! 至于以什么样的方式保证不重复,其原因后面会说到。
先来结合代码看看HashSet集合中添加重复元素会发生什么:
package com.stormwang.SetTest;
import java.util.HashSet;
import java.util.Iterator;
/**
* @author StormWangxhu
* @version 创建时间:2017年11月4日 下午4:03:26
*
*/
public class HashSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet set= new HashSet();
//向集合中添加元素
set.add("java");
set.add("Friday");
set.add("java");
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
}
}
再来看看结果:
在代码中,重复了字符串Java,但是运行后,只保留下了一个。
且可以看出,取出顺序和加入顺序也不一致。
原因:
不重复是因为做了很多工作:当向Set集合中添加对象时,add().
步骤:
1、首先调用当前存入对象的hashCode()方法,获得该对象哈希值。
2、根据哈希值确定其存储位置。
3、判断该位置上是否有对象
(1)、无对象,则存入集合。
(2)、有对象 ———->>>调用equal()方法,比较对象是否相等。
(3)、
相等——->>>舍弃该对象
不相等——存入该集合。
下面根据图来理解一下: