`
sd4886656
  • 浏览: 90590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

菜鸟的Java源代码分析--Vector类

 
阅读更多

Vector类:


为了更好的从宏观上理解Vector,我们可以首先看一下Vector的父类以及实现的一些Interface:



 

Vector作为一种容器,实现了Collection这个接口,并继承AbstractList这个“直接父类”。同时,我们还能看到,Vector和他的父类AbstractList都实现了List这个接口,表明Vector是一种List类型的容器(其他的有比如Map型)。
综上,用集合的思想来看Vector的逻辑地位:Collection > List > Vector ,Vector是所有容器的一条分支。

 

由UML图,可以看到Vector的这个类在设计时的逻辑构架,作为一个菜鸟,除了五花八门的算法,这种高级的面向对象的设计思想,是初学者更应该去把握的。 

下面来Trace Code:Interface Collection:
Collection是所有容器的根,定义了了Collection应该去实现的方法Method,见下图:


 

public abstract class AbstractCollection implements Collection {

    protected AbstractCollection() {
        super();
    }
    public boolean add(E object) {
        throw new UnsupportedOperationException();
    }

    public boolean addAll(Collection extends E> collection) {
        boolean result = false;
        Iterator extends E> it = collection.iterator();
        while (it.hasNext()) {
            if (add(it.next())) {
                result = true;
            }
        }
        return result;
    }

    public void clear() {
        Iterator it = iterator();
        while (it.hasNext()) {
            it.next();
            it.remove();
        }
    }

    public boolean contains(Object object) {
        Iterator it = iterator();
        if (object != null) {
            while (it.hasNext()) {
                if (object.equals(it.next())) {
                    return true;
                }
            }
        } else {
            while (it.hasNext()) {
                if (it.next() == null) {
                    return true;
                }
            }
        }
        return false;
    }

    public boolean containsAll(Collection> collection) {
        Iterator> it = collection.iterator();
        while (it.hasNext()) {
            if (!contains(it.next())) {
                return false;
            }
        }
        return true;
    }

    public boolean isEmpty() {
        return size() == 0;
    }
    public abstract Iterator iterator();

    public boolean remove(Object object) {
        Iterator> it = iterator();
        if (object != null) {
            while (it.hasNext()) {
                if (object.equals(it.next())) {
                    it.remove();
                    return true;
                }
            }
        } else {
            while (it.hasNext()) {
                if (it.next() == null) {
                    it.remove();
                    return true;
                }
            }
        }
        return false;
    }

    public boolean removeAll(Collection> collection) {
        boolean result = false;
        Iterator> it = iterator();
        while (it.hasNext()) {
            if (collection.contains(it.next())) {
                it.remove();
                result = true;
            }
        }
        return result;
    }

    public boolean retainAll(Collection> collection) {
        boolean result = false;
        Iterator> it = iterator();
        while (it.hasNext()) {
            if (!collection.contains(it.next())) {
                it.remove();
                result = true;
            }
        }
        return result;
    }
    public abstract int size();
    public Object[] toArray() {
        int size = size(), index = 0;
        Iterator> it = iterator();
        Object[] array = new Object[size];
        while (index  T[] toArray(T[] contents) {
        int size = size(), index = 0;
        if (size > contents.length) {
            Class> ct = contents.getClass().getComponentType();
            contents = (T[]) Array.newInstance(ct, size);
        }
        for (E entry : this) {
            contents[index++] = (T) entry;
        }
        if (index  it = iterator();
        while (it.hasNext()) {
            Object next = it.next();
            if (next != this) {
                buffer.append(next);
            } else {
                buffer.append("(this Collection)"); //$NON-NLS-1$
            }
            if (it.hasNext()) {
                buffer.append(", "); //$NON-NLS-1$
            }
        }
        buffer.append(']');
        return buffer.toString();
    }
}
 

 

//AbstractCollection 抽象的实现了Collection这个接口的所有方法,没有存在任何具体的Method,因为所有遍历过程都依赖于自身的迭代器。

举个例子:

    public void clear() {
        Iterator it = iterator();
        while (it.hasNext()) {
            it.next();
            it.remove();
        }
    }

照着设计者的意思,加黑这句代码iterator()指望着子类去实现了,所有的框架都给你搭好了,子类或者任何具体的容器要去实现这个迭代器,更进一步说,具体容器的数据结构与迭代器紧密相关,文邹邹说起来这叫耦合度高。在这里,一切都是个模子。小总结:

1、方法却是一个抽象的方法,显然设计者的目的是让所有的ConcreteCollection(具体Collection)去继承抽象的Collection。

2、容器的结构与迭代方式都因自身的种类而不同。

 

困死了,待续。。。。

  • 大小: 28.2 KB
  • 大小: 37.9 KB
分享到:
评论

相关推荐

    菜鸟Java葵花宝典2017-2018

    《菜鸟Java葵花宝典2017-2018》是一本专注于Java学习与面试的资源集合,旨在帮助初学者系统地掌握Java编程语言并为面试做好充分准备。这本书可能涵盖了Java的基础知识、进阶特性、设计模式以及常见面试问题等内容。...

    34--[菜鸟闯关].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    34--[菜鸟闯关].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码34--[菜鸟闯关].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码34--[菜鸟闯关].zip源码scratch2.0 3.0编程项目源文件源码案例素材源...

    java菜鸟学习第一步-java基础语法

    Java源代码文件可以使用javac命令编译成Java字节码文件,然后使用java命令解释执行Java字节码文件。 Java语法 Java语言的语法包括注释、数据类型、数组、表达式、控制结构、函数等方面。 注释 Java语言的注释...

    java贪吃蛇源代码

    【Java贪吃蛇源代码详解】 Java贪吃蛇游戏是一个经典的编程练习项目,它适合初学者,特别是对Java编程感兴趣的新手和菜鸟。这个项目旨在帮助开发者熟悉基本的编程概念,如控制台输入输出、循环、条件判断以及对象和...

    Java 8 中文版 - 在线API中文手册 - 码工具.mht

    Java 8 中文版 - 在线API中文手册 - 码工具.mht

    Java基础练习代码

    本文将深入探讨Java基础练习代码中的关键概念,帮助初学者巩固基础,提高编程技能。 首先,Java是一种面向对象的编程语言,它的核心特性包括封装、继承和多态。在练习代码中,你会看到如何定义类(class)并创建...

    JAVA初学者笔记 使用JAVA理解逻辑基础-菜鸟入门(简单易懂)

    1. 编写源代码: 创建一个公共类(public class),类名应与文件名保持一致,例如`HelloWorld`。 2. 编写`main()`方法: 主方法(main method)是程序的入口点,其定义为`public static void main(String[] args)`...

    java编码规约v1-参考阿里巴巴技术规范-java菜鸟助手

    类、类属性、类方法的注释必须使用Javadoc规范 所有的抽象方法(包括接口中的方法)必须要用Javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。 所有的类都必须添加创建者和...

    mysql-connector-java-5.1.10 mysql-connector-java-8.0.19

    在Java应用中使用`mysql-connector-java`,你需要将对应的JAR文件添加到项目的类路径中。对于Maven项目,可以在pom.xml文件中添加依赖: ```xml <groupId>mysql <artifactId>mysql-connector-java <version>8.0...

    selenium-java-2.41.0,selenium-java-2.33

    在本主题中,我们将深入探讨`selenium-java-2.41.0`和`selenium-java-2.33.0`这两个版本。 首先,`selenium-java-2.33.0.zip`和`selenium-java-2.41.0.zip`是两个不同版本的Selenium Java绑定包。这些zip文件包含了...

    JAVA 扫雷1.2 源代码 详细注释

    【JAVA 扫雷1.2 源代码 详细注释】是一款基于JAVA语言开发的扫雷游戏,它不仅提供了一种娱乐方式,更是一个学习JAVA编程和理解游戏逻辑的好教材。开发者在编写代码的过程中,充分考虑了初学者的需求,为每一部分关键...

    职场菜鸟升职记----完整版

    通过以上分析,《职场菜鸟升职记》不仅讲述了一个关于个人成长和职业发展的故事,还深入探讨了职场心态、沟通技巧、技能培养、形象管理和团队精神等多个方面的重要知识点,为读者提供了宝贵的职场指导。

    java菜鸟教程_JAVA菜鸟教程_

    【Java菜鸟教程】是针对初学者精心编写的教程,旨在帮助新手快速掌握Java编程语言的基础知识。本教程全面覆盖了Java的核心概念和技术,是学习Java编程的理想起点。 首先,Java是一种面向对象的编程语言,由Sun ...

    Android课程设计-菜鸟裹裹app源代码+文档说明.zip

    Android课程设计-计菜鸟裹裹app源代码+文档说明菜鸟裹裹主要包括1.支付宝快速登录2.支付宝注册3.手机淘宝登录,手机登录4.首页-校园认证5.首页-包裹搜索,首页-添加包裹6.首页-扫一扫7.首页-身份码8.首页-寄万物,寄...

    mysql-connector-java-5.6-bin.jar

    mysql-connector-java-5.6-bin.jar--------------------------------------------------------------------

    菜鸟学安卓 ----01之环境准备

    - **JDK(Java Development Kit)**:安装 JDK 1.7 或更高版本,因为 Android 应用主要使用 Java 语言编写。 - **Android SDK(Software Development Kit)**:包含了 Android 平台的各种工具和库文件,是开发 ...

    alipay.trade.page.pay-JAVA-UTF-8.zip

    本篇文章将深入探讨"alipay.trade.page.pay-JAVA-UTF-8.zip"这个压缩包中的内容,帮助开发者理解和集成阿里支付宝的支付接口。 首先,"alipay.trade.page.pay"是阿里支付的页面跳转支付接口,主要用于商家网站唤起...

    java 扫雷源代码 带有详细的注释

    通过分析源代码,初学者可以学习到如何在Java环境中创建图形用户界面(GUI),以及如何编写事件监听器来响应用户的操作。 加入的"求救"按钮是一项创新功能,允许玩家在遇到困难时获取随机未标记雷区的信息。这需要...

    菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华

    菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华...

Global site tag (gtag.js) - Google Analytics