简单实现HashSet
因为HashSet的底层是用HashMap实现的,key值为传进来的对象,value都为HashSet类里面定义好的静态Object类,HashSet的许多方法都是直接调用HashMap的方法,并且它的方法几乎只是collection接口的实现,所以很容易理解,这里直接放代码(简单几个方法的实现)。
package myCollection;
import java.util.HashMap;
/**
* 简单实现HashSet
* TODO
* @version 1.0
* @author 王星宇
*/
public class myHashSet {
/**
* map 作为key,PRESENT作为固定的value
*/
HashMap map;
private static final Object PRESENT = new Object();
/**
* 构造函数,初始化一个HashMap
*/
public myHashSet() {
map = new HashMap();
}
/**
* 直接调用HashMap的put()方法
* @param obj
*/
public void add(Object obj) {
map.put(obj, PRESENT);
}
/**
* 直接调用map的size()方法
* @return
*/
public int size() {
return map.size();
}
}
HashSet和HashMap的区别
因为HashSet底层就是用HashMap实现的,所以二者区别并不大,我找了几篇博客,差不多都是这张表格,除了“理所当然”的区别,最主要的区别是二者比较是否相同的方式不同。
HashMap | HashSet |
---|---|
HashMap实现了Map接口 | HashSet实现了Set接口 |
HashMap储存键值对 | HashSet仅仅存储对象 |
使用put()方法将元素放入map中 | 使用add()方法将元素放入set中 |
HashMap中使用键对象来计算hashcode值 | HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false |
HashMap比较快,因为是使用唯一的键来获取对象 | HashSet较HashMap来说比较慢 |