美文网首页Jdk源码分析Java学习笔记
JDK1.8 之 集合框架 HashSet ,LinkedH

JDK1.8 之 集合框架 HashSet ,LinkedH

作者: Gxgeek | 来源:发表于2017-09-01 14:40 被阅读84次

    Set 平常的应用场景 (个人目前为止) 对我来说不是很多

    为了全面了解集合框架 还是看下(按照这个趋势 我估计 下个星期 可以看jur包了,不过 看juc 包 肯定 会写很多先导知识)

    • 构造方法

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

      呵呵 原来如此 HashSet 看来就是 HahMap 的小弟

    -增 add

    private static final Object PRESENT = new Object();
    
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    

    add 看起来也很简单的样子

    •   public boolean contains(Object o) {
            return map.containsKey(o);
        }
      
    •   public boolean isEmpty() {
            return map.isEmpty();
        }
      
    •   public void clear() {
            map.clear();
        }
      
    • 删 remove removeAll

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
    
    
    public boolean removeAll(Collection<?> c) {
        Objects.requireNonNull(c);
        boolean modified = false;
    
        if (size() > c.size()) {
            for (Iterator<?> i = c.iterator(); i.hasNext(); )
                modified |= remove(i.next());
        } else {
            for (Iterator<?> i = iterator(); i.hasNext(); ) {
                if (c.contains(i.next())) {
                    i.remove();
                    modified = true;
                }
            }
        }
        return modified;
    }
    

    removeAll 是迭代器 遍历删除 实在remove 基础上做出来的

    -遍历

    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }
    

    HashSet 基本 是 HashMap 的基础上做出来的 基本就是 把HashMap 的Key 当槽位
    迭代器就是调用的 HashMap 的Key 的 Iterator 由此 可知道 HashSet 是无序的

    它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。

    玛莎噶 等等 好像我发现了一个异类

    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }
    

    嗯 这个 HashSet 的构造早 没有 被修饰 ,就是不能把别人调用 那么调用的到底是谁呢?

    let me see

    linkedHashSet

    就是这货 LinkedHashSet 现在略略关系 (总结 )

    • LinkedHashMap 继承了 HashMap
    • HashSet 使用了HashMap
    • LinkedHashSet 继承 HashSet 使用的是 LinkedHashMap
    • set 的原理就是把值放在HashMap 的Key 上
    linkedHashSet

    LinkedHashSet里面没什么方法 四个构造 还有一个 spliterator() 是1.8 出来的 值得一提的是
    1.8 的集合框架 都多了 几个方法 这个方法到专题 讲1.8 特性我们再提

    学习 HashSet 和 LinkedHashSet 基本是温习了一遍 HashMap 课件HashMap 设计有多优越

    end

    微信公众号

    相关文章

      网友评论

        本文标题:JDK1.8 之 集合框架 HashSet ,LinkedH

        本文链接:https://www.haomeiwen.com/subject/tvxkjxtx.html