欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java之HashSet源码分析(第三篇:访问)

程序员文章站 2022-04-03 19:33:47
...

0、HashSet毕竟是作为集合实现的,集合里的包含、未包含这样的概念比较突出,所以HashSet没有提供直接获取一个元素的方法

Java之HashSet源码分析(第三篇:访问)

 

1、包含元素判断

    public boolean contains(Object o) {
        return map.containsKey(o);
    }

 直接调用了HashMap的containsKey方法,传入的key对象即可

 

2、遍历元素(间接获得元素)

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

HashSet可以用两种遍历方法,foreach语句和调用迭代器,其实算一种,因为foreach底层也是迭代器

iterator方法返回一个Iterator对象,这里是直接用了HashMap的keySet()方法,keySet()方法会返回一个Set对象,该Set对象的实际类型是KeySet对象,接着就会再调用KeySet对象的iterator方法,该方法会返回一个KeyIterator对象

 

3、看下迭代器的返回过程(以下代码位于HashMap中)

    public Set<K> keySet() {
        Set<K> ks = keySet;
        if (ks == null) {
            ks = new KeySet();
            keySet = ks;
        }
        return ks;
    }

 

4、以下代码位于HashMap的内部类KeySet中

public final Iterator<K> iterator()     { return new KeyIterator(); }

 

5、以下代码位于HashMap的内部类KeyIterator中

    final class KeyIterator extends HashIterator
        implements Iterator<K> {
        public final K next() { return nextNode().key; }
    }

 

6、有了迭代器对象,我们就可以愉快的进行遍历元素的操作

 

 

相关标签: Java 综合