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;
        }
    
  • 相关阅读:
    Debian8搭建LEMP环境
    ProjectManager Beta 7 项目管理器发布
    我的Linux软件集
    修改/home内子目录的名字
    Nginx配置特定二级域名
    Debian8 安装wordpress博客
    LinuxMint18使用单独分区作为Home挂载点
    LinuxMint18配置Grub2默认启动操作系统
    《失恋33天》从绝境中走出来的故事
    爱的世界很拥挤,写在读《爱,就这么简单》之后
  • 原文地址:https://www.cnblogs.com/jabnih/p/5650872.html
Copyright © 2011-2022 走看看