Jdk源码分析Java学习笔记

JDK1.8 之 集合框架 HashSet ,LinkedH

2017-09-01  本文已影响84人  Gxgeek

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

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

-增 add

private static final Object PRESENT = new Object();

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

add 看起来也很简单的样子

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 现在略略关系 (总结 )

linkedHashSet

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

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

end

微信公众号
上一篇下一篇

猜你喜欢

热点阅读