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

JDK Vector源码学习

    博客分类:
  • j2se
阅读更多
public class Vector<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

 

里面的方法 多为 synchronized  的因此Vector是线程安全的

 

Vector里面的好多api和 ArrayList是相似的

区别是线程安全与否 与  动态增长的时候的增长速率不同   动态增长会申请大的空间然后调用Arrays.copyOf()复制过去  这里又调用了System.arrayCopy() 这个是个native 方法

 

 

 

4个构造函数

 

public Vector() {
 this(10);
}

 

public Vector(int initialCapacity) {
 this(initialCapacity, 0);
}

 

public Vector(int initialCapacity, int capacityIncrement) {
       super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
      this.elementData = new Object[initialCapacity];
      this.capacityIncrement = capacityIncrement;
}


    protected int capacityIncrement; //与自动增长有关的一个量

 

public Vector(Collection<? extends E> c) {
     elementData = c.toArray();
     elementCount = elementData.length;
     // c.toArray might (incorrectly) not return Object[] (see 6260652)
     if (elementData.getClass() != Object[].class)
         elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
}

 

与自动增长有关的方法

public synchronized void ensureCapacity(int minCapacity) {
     modCount++;
     ensureCapacityHelper(minCapacity);
}

 

private void ensureCapacityHelper(int minCapacity) {
 int oldCapacity = elementData.length;
 if (minCapacity > oldCapacity) {
     Object[] oldData = elementData;
     int newCapacity = (capacityIncrement > 0) ?            // vector 中的 capacityIncrement若是被设定了 就增长这么多
  (oldCapacity + capacityIncrement) : (oldCapacity * 2);   若是没有就增长2倍
         if (newCapacity < minCapacity) {
          newCapacity = minCapacity;
     }
            elementData = Arrays.copyOf(elementData, newCapacity);
   }
}

 

public synchronized void setSize(int newSize) {// 可能扩充 可能裁剪
    modCount++;
    if (newSize > elementCount) {
        ensureCapacityHelper(newSize);
    } else {
        for (int i = newSize ; i < elementCount ; i++) {
          elementData[i] = null;
       }
   }
   elementCount = newSize;

}

 

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}

public synchronized int capacity() {   //返回可容纳的容量
 return elementData.length;
}

 

public synchronized int size() {  // 返回现有元素个数
 return elementCount;
}
 
分享到:
评论

相关推荐

    本仓库记录了我的Java学习进阶之路,涵盖了Java基础、JDK源码、JVM中的重要知识,附有代码和博客讲解,旨在提供一个Java在线共享学习平台,帮助更多的Java学习入门者进阶 .zip

    作者目录Java基础Java基础学习(1)——引用Java基础学习(2)——注解Java基础学习(3)——泛型Java基础学习(4)——动态代理《Java多线程核心技术》读书笔记JDK源Java集合框架源码解读(1)——ArrayList、LinkedList和...

    Windows下1.1到1.8所有JDK.zip

    每个JDK版本都包含源码,这对于学习Java的开发者来说极其宝贵,可以深入理解Java的内部工作原理。32位和64位版本的提供,确保了不同硬件环境下的兼容性。通过这个压缩包,开发者可以追溯Java的发展历程,了解每个...

    清华妹子的Java仓库(进阶学习路线)

    本仓库记录了我的Java学习进阶之路,涵盖了Java基础、JDK源码、JVM中的重要知识,附有代码和博客讲解,旨在提供一个Java在线共享学习平台,帮助更多的Java学习入门者进阶。 Java学习 本仓库记录了我的Java学习进阶...

    java源码收集-depthgoods::restroom::restroom:面试题收集Java并发专题JDK源码JVM等:restroom::restroom:

    综上所述,"java源码收集-depthgoods"资源是一个全面学习和提升Java并发、JDK源码理解和JVM知识的好材料。通过深入学习和实践,开发者能够更好地应对多线程环境下的编程挑战,优化代码性能,并具备更深层次的系统级...

    JAVA源码阅读的真实体会.pdf

    Sun公司提供了JDK的源码,虽然隐藏较深,但通过探索可以获得宝贵的学习资源。 在Java Web开发领域,阅读Tomcat源码前,需要有扎实的Servlet和JSP基础,理解Servlet规范,并了解HTTP协议。可以先从简单的Struts框架...

    java8源码-JavaRobot:Java学习笔记,JavaLearningNote

    学习笔记(持续更新中) 所有文章均同步发布到微信公众号【JavaRobot】,关注微信公众号,及时得到文章推送,谢谢支持。 说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized...

    安卓游戏源码_蚂蚁迷

    源码是开发者的智慧结晶,通过阅读和学习源码,我们可以深入理解游戏的运行机制、编程逻辑以及Android应用开发的实践技巧。 首先,我们要了解在Android平台上开发游戏的基本流程。这通常涉及到以下几个关键步骤: ...

    java 自整理的基础面试知识

    深入理解JDK源码有助于提升对Java语言的理解。例如,Vector、ArrayList既继承了AbstractList又实现了List接口,这是因为接口实现提供了默认实现,而直接继承AbstractList可以获取更多的抽象方法实现,节省代码量。...

    第一章 Java常用集合类总览1

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了数据结构和算法的抽象,使得开发者...在阅读《分布式Java应用:基础与实践》或其他相关资料时,结合JDK源码进行深入学习,可以进一步提升你的编程能力。

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集.zip

    Spring源码分析之IoC.docx 关于线程和线程池的学习与使用.docx 深入理解JVM垃圾回收机制.docx 深入理解多线程实现的另一种方式Callable.docx 红黑树简介.docx 线程死锁及解决办法.docx 线程锁之重入锁.docx 线程间的...

    MyEclipse集成weka并添加新算法

    在编译过程中可能会遇到语法错误,比如使用了不兼容的Java特性(如`vector&lt;object&gt;`)。如果遇到这种情况,检查并确保项目设置中的JDK版本被设置为1.5或更高版本,因为某些较旧的Weka代码可能不兼容更新的Java版本。...

    vectorpen:Java源代码-vector source code

    在使用和学习这个开源项目时,开发者首先需要安装Java Development Kit (JDK) 和相应的构建工具(如Maven或Gradle)。然后,通过解压文件、设置环境变量、导入到IDE(如IntelliJ IDEA或Eclipse)或使用命令行构建...

    java面试宝典

    从提供的文件内容来看,我们可以梳理出一系列关于Java技术的知识...其中不仅包含了大量关于Java核心知识点的解析,还涉及了并发编程、JVM原理以及源码层面的深度理解,非常适合即将参加Java技术面试的开发者参考学习。

    java学习内容[归类].pdf

    Java集合框架是Java库的基石,包括Collection、List、Set、Map及其子类,如ArrayList、LinkedList、Vector、HashSet、TreeSet、HashMap和TreeMap等。深入分析这些类的源码有助于理解它们的工作原理。Java NIO(非...

    超详细的阿里面试问题总结-错过无.docx

    * JDK源码中的集合类实现 5. JVM和类加载机制: * JVM的结构和类加载原理 * 类加载机制的理解 6. 设计模式: * 观察者模式的实现 * 其他设计模式的理解和应用 7. 分布式系统和负载均衡: * 分布式系统的设计和...

    java学习内容[文].pdf

    6. 集合API:深入学习Collection、List、Set、Map及其子类如ArrayList、LinkedList、Vector、HashSet、TreeSet、HashMap和TreeMap等,分析其源代码并结合数据结构加深理解。 7. AWT和Swing:理解这两个图形用户界面...

    125个关于java的问题集锦

    - **StringBuilder**:JDK 5.0新增,非线程安全,效率高于StringBuffer,适用于单线程环境。 3. **字符串分隔函数**:题目中的函数`split(String str, int chars)`将字符串按指定字符长度分隔,返回一个字符串数组...

    基于安卓的中国象棋游戏app

    5. **Android图形与动画**:中国象棋棋盘和棋子的显示可能使用了Bitmap、Canvas或者Vector Drawable资源,同时,移动棋子的动画效果可能通过Property Animation或Transition API实现。 6. **触摸事件处理**:...

    SVM参考软件JSVM

    **支持向量机(Support Vector Machine,简称SVM)**是一种广泛应用的监督学习算法,尤其在分类和回归问题上表现出色。JSVM是基于Java实现的支持向量机软件,它为用户提供了在Java环境中运用SVM进行数据建模的可能性...

    AndroidDevTools

    SDK包括Java开发工具(如JDK)、Android平台库、模拟器、调试工具以及各种API文档。开发者可以通过SDK Manager下载不同版本的Android平台,以便在不同版本的设备上测试应用兼容性。 其次,开发工具是Android开发的...

Global site tag (gtag.js) - Google Analytics