|
- package settest;
-
- import java.util.HashSet;
- import java.util.Set;
-
- /*
- * Set集合:HashSet
- * 1.HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构。
- * 2.哈希表又叫做散列表,哈希表底层是一个数组,这个数组中每一个元素是一个单向链表,每个单向链表
- * 都有一个独一无二的hash值,代表数组的下标。在某个单向链表中的每一个节点上的hash值是相等的。
- * hash值实际上是key调用hashCode方法,在通过“hash function”转换成的值。
- * 3.如何向哈希表中添加元素:
- * 先调用被存储的key的hashCode方法,经过某个算法得出hash值,如果在这个哈希表中不存在这个hash值,
- * 则直接加入元素。如果该hash值已经存在,继续调用key之间的equals方法,如果equals方法返回false,
- * 则将改元素添加。如果equals方法返回true,则放弃添加该元素。
- * 4.HashSet其实是HashMap中的key部分,HashSet有什么特点,HashMap中key应该具有相同的特点。
- * 5.HashMap和HashSet初始化容量都是16,默认加载因子是0.75.
- * */
- public class Test01 {
-
- public static void main(String[] args) {
- Set s = new HashSet();
- Employee e1 =new Employee("1000", "TOM");
- Employee e2 =new Employee("1000", "TOM");
- Employee e3 =new Employee("2000", "SMITH");
- Employee e4 =new Employee("2001", "COOK");
- Employee e5 =new Employee("3000", "KING");
- Employee e6 =new Employee("3001", "SUN");
-
- s.add(e1);
- s.add(e2);
- s.add(e3);
- s.add(e4);
- s.add(e5);
- s.add(e6);
-
- System.out.println(s.size());
- }
-
- }
-
- class Employee{
- String id;
- String name;
- public Employee(String id, String name) {
- this.id = id;
- this.name = name;
- }
- public boolean equals(Object o){
- if(o==this) return true;
- if(o instanceof Employee){
- Employee e =(Employee)o;
- if (e.id.equals(this.id) && e.name.equals(this.name)){
- return true;
- }
- }
- return false;
- }
- //以y员工编号判断哈希值是否重复
- public int hashCode(){
- return this.id.hashCode();
- }
- }
复制代码 |
|