特点:无序(存取的顺序不一致),唯一。
// a b c d e f g
public boolean add(Object obj); //往set集合中添加重复元素的时候,返回值是false。
遍历:
1、迭代器。
2、增强for。
HashSet:
案例:存储字符串并遍历
存储自定义对象并遍历。
HashSet是如何保证元素唯一性的?
依赖于两个方法:hashCode(),equals()。
set.add(new Person("张三",23));
原理:
A:调用要添加的对象的hashCode()方法,计算出该对象的哈希值。
B:去集合中找是否有元素的哈希值和要添加的元素的哈希值相同。
如果不同:直接把该元素存到集合中。
如果相同:调用equals()方法去比较各个属性的值。
如果都相同,不添加,否则,就把该元素添加到集合中。
问题1:hashCode()方法没有重写,equals()没有执行。 ???
LinkedHashSet:
有序,唯一
注意:一个类可以有多个对象,但是一个类的字节码文件对象只有一个。 |
|