• 自己实现HashSet


    HashSet的实现相对比较简单。它强依赖于HashMap,包括底层数据实际上就是存储于HashMap,由于HashMap在哈希碰撞下,如果value值相同,那么将会覆盖该value,HashSet正是利用这一特性来达到元素唯一的。

    一属性

    定义一个HashMap装载数据,定义一个final的Object来做为HashMap的value。

    public class MyHashSet<E> {
        
        private transient MyHashMap<E, Object> map;
        
        private transient final Object value = new Object();
    
    }

    添加构造方法

    public MyHashSet(){
            map = new MyHashMap<E, Object>();
        }
        
        public MyHashSet(int initCount){
            map = new MyHashMap<E, Object>(initCount);
        }
        
        public MyHashSet(int initCount, float loadFactor){
            map = new MyHashMap<E, Object>(initCount, loadFactor);
        }

    二方法

    1增加

    返回空表示添加成功,不为空表示已经存在该元素。

    public boolean add(E e){
            return map.put(e, value) == null;
        }

     2删除

    public void remove(E e){
            map.remove(e);
        }

    3迭代

    直接从HashMap得到迭代器。

    public class MyHashSet<E> implements Iterable<E>{  
        public Iterator<E> iterator(){
            return map.keySet().iterator();
        }  
    }
  • 相关阅读:
    【Linux】没有网的情况下如何安装GCC
    【PL/SQL】PLSQL Developer注册码
    【JS】字符串操作
    【java】svn显示&#215;
    线段树
    病毒感染者
    并查集
    最小的N个和(堆)
    priority_queue的用法
    打印杨辉三角
  • 原文地址:https://www.cnblogs.com/eryuan/p/7814884.html
Copyright © 2020-2023  润新知