zoukankan      html  css  js  c++  java
  • JDK Collection 源码分析(1)—— Collection

    JDK Collection

      JDK Collection作为一个最顶层的接口(root interface),JDK并不提供该接口的直接实现,而是通过更加具体的子接口(sub interface)的实现。该接口存在是因为有时候需要更加通用的Collection来对元素进行操作,比如一个方法,接收一个Collection,那么就可以不考虑其具体到底是List还是Set之类的。
      其子接口的实现可以提供两种构造方法,一个是空构造方法,另一个是参数为Collection,这样可以实现将任意一个Collection的实现转换为当前实现的类型。JDK里面都遵循这个约定。至于是否实现同步则由实现类来决定。

    Iterable接口

      实现该接口,可以使用foreach语句,如for (Item item : items)
    该接口仅仅只有一个方法Iterator<T> iterator(),返回一个迭代器。

    Iterator

      迭代器设计模式,通过迭代器,可以实现所有的Collection遍历方式都是一样的,并且对外隐藏了每个具体类的内部遍历方式。
      ListIterator该子接口用于遍历List。

    AbstractCollection抽象类

      该类实现了Collection接口,用于提供一个骨架,可以减少实现Collection接口的工作量,采用模板方法设计模式,抽象出了sizeiterator方法,这样其他只读的方法都可以调用那两个方法,即如果只需要实现只读集合,可以只实现那两个方法。如果要实现可修改的,就要实现另外两个方法:additerator.remove方法。
    例如:

    	public abstract Iterator<E> iterator();
    
        public boolean contains(Object o) {
            Iterator<E> it = iterator();
            if (o==null) {
                while (it.hasNext())
                    if (it.next()==null)
                        return true;
            } else {
                while (it.hasNext())
                    if (o.equals(it.next()))
                        return true;
            }
            return false;
        }
    
  • 相关阅读:
    oracle过期备份未删除导致磁盘撑爆
    数据文件、监听日志、告警日志、redo日志、归档日志的迁移
    linux软件卸载命令
    Nginx版本平滑升级方案
    rsync 服务搭建
    在node节点部署kubectl管理k8s集群
    源码编译安装nginx及设置开机启动项
    K8S日常运维中关于“ImagePullBackOff”报错的处理思路分析
    查看所有日志命令:journalctl
    Docker编排工具Docker Compose的使用
  • 原文地址:https://www.cnblogs.com/jabnih/p/5650872.html
Copyright © 2011-2022 走看看