标签:set
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class SetTest01 { /* 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 static void main(String[] args){ //创建Set集合 Set s = new HashSet(); //无序不可重复 s.add(1); s.add(1); s.add(100); s.add(85); s.add(88); //遍历 Iterator it = s.iterator(); while(it.hasNext()){ System.out.println(it.next()); } //结论:存储在HashSet集合或者HashMap集合key部分的元素,需要同时重写hashCode+equals Set es = new HashSet(); Employee e1 = new Employee("1000","JACK"); Employee e2 = new Employee("1000","JACK"); Employee e3 = new Employee("1000","SCOTT"); Employee e4 = new Employee("2001","SUN"); Employee e5 = new Employee("3000","JIM"); Employee e6 = new Employee("3001","COOK"); System.out.println(e1.hashCode()); System.out.println(e2.hashCode()); //添加元素 es.add(e1); es.add(e2); es.add(e3); es.add(e4); es.add(e5); es.add(e6); //查看集合元素个数 System.out.println(es.size()); // } } public class Employee { private String id;//id private String name;//name public String getNo() { return id; } public void setNo(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } //构造方法 public Employee(String id, String name) { super(); this.id = id; this.name = name; } public Employee(){ } //重写了hashcode方法。 public int hashCode() { return id.hashCode(); } //重写了equals方法。 public boolean equals(Object obj) { if(obj==this){ return true; }else{ if(obj instanceof Employee){ Employee e = (Employee)obj; if(e.id.equals(this.id)&&e.name.equals(this.name)){ return true; } } } return false; }
本文出自 “gaogaozi” 博客,请务必保留此出处http://hangtiangazi.blog.51cto.com/8584103/1669561
标签:set
原文地址:http://hangtiangazi.blog.51cto.com/8584103/1669561