HashSet原理

HashSet的底层原理:
底层实际上就是一个HashMap,哈希表的每一个entry对象的key是HashSet的每一个元素,value统一都是new Object()
定义Set接口

public interface Set {
    public int size();

    public void add(Object obj);

    public boolean isEmpty();

    public boolean contains(Object obj);
}

实现Set接口

/**
 * 实现Set接口
 */
public class HashSet implements Set {

    private transient HashMap map;//底层有一个HashMap的引用,指向一个哈希表

    private static final Object PRESENT = new Object();//Set中向map中存放键值对,value统一的是PRESENT

    public HashSet(){
        map=new HashMap();
    }

    @Override
    public int size() {
        return map.size();
    }

    @Override
    public void add(Object obj) {
        map.put(obj,PRESENT);
    }

    @Override
    public boolean isEmpty() {
        return map.size()==0;
    }

    @Override
    public boolean contains(Object obj) {
        return map.get(obj) !=null;
    }
}

因为他的底层是一个HashMap所以他的所有方法都是依赖HashMap来实现的,这里直接调用HashMap就可以了
测试类

public class TestHashSet {
    public static void main(String[] args) {
        Set set = new HashSet();
        set.add("HTML");
        set.add("Java");
        set.add("MySQL");
        set.add("Java");
        System.out.println(set.size());
        System.out.println(set.toString());
        System.out.println(set.contains("HTML"));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值