摘要:同步众所周知,是同步的而不是,在一些必要的方法上都加了关键字,但是这也会加大系统开销。中有一个方法用来返回一个,以匿名内部类的方式实现的接口和类似,都用作于对集合进行迭代,不过没有删除功能,已经被取代。还有是的,但不是,这一点很重要。
在上篇文章ArrayList源码浅析中分析了一下 ArrayList的源码和一些重要方法,现在对比 ArrayList,总结一下 Vector和 ArrayList的不同
构造方法其实两者在很多地方都是一样的,然而在构造方法上面, Vector比 ArrayList多了一个方法:
public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement; }
主要是因为 ArrayList中没有 capacityIncrement这个变量, vector的这个构造方法,不仅能够指定初始化容量,还能指定当容量不够时,容量自增的大小。下面看扩容方法.
扩容策略在 ArrayList中,扩容的时候一般都是增加0.5倍左右,而在 Vector中,如果指定了这个 capacityIncrement,就会在原来容量的基础上增加 capacityIncrement;如果没有指定,则增加一倍容量。
private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity); }
除了这一点,其它和 ArrayList一模一样。
同步众所周知, Vector是同步的而 ArrayList不是, Vector在一些必要的方法上都加了 synchronized关键字,但是这也会加大系统开销。
EnumerationVector中有一个 elements()方法用来返回一个 Enumeration,以匿名内部类的方式实现的:
public Enumerationelements() { return new Enumeration () { int count = 0; public boolean hasMoreElements() { return count < elementCount; } public E nextElement() { synchronized (Vector.this) { if (count < elementCount) { return elementData(count++); } } throw new NoSuchElementException("Vector Enumeration"); } }; }
Enumeration接口和 Iterator类似,都用作于对集合进行迭代,不过没有删除功能,已经被 Iterator取代。还有Iterator 是 Fast-Fail的,但 Enumeration不是,这一点很重要。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64444.html
摘要:底层使用的是双向链表数据结构之前为循环链表,取消了循环。快速随机访问就是通过元素的序号快速获取元素对象对应于方法。而接口就是用来标识该类支持快速随机访问。仅仅是起标识作用。,中文名为双端队列。不同的是,是线程安全的,内部使用了进行同步。 前言 学习情况记录 时间:week 2 SMART子目标 :Java 容器 记录在学习Java容器 知识点中,关于List的需要重点记录的知识点。...
摘要:常用集合使用场景分析过年前的最后一篇,本章通过介绍,,,底层实现原理和四个集合的区别。和都是线程安全的,不同的是前者使用类,后者使用关键字。面试官会认为你是一个基础扎实,内功深厚的人才到这里常用集合使用场景分析就结束了。 Java 常用List集合使用场景分析 过年前的最后一篇,本章通过介绍ArrayList,LinkedList,Vector,CopyOnWriteArrayList...
摘要:毕业两个星期了,开始成为一名正式的码农了。将指定位置的数据移除。但是问题是,为时,并不是直接一个大小为的数组,而是使用静态变量来代替。此外,函数还做了越界检查。返回迭代器,与之有一个搭配的辅助类。 毕业两个星期了,开始成为一名正式的java码农了。一直对偏底层比较感兴趣,想着深入自己的java技能,看书、读源码、总结、造轮子实践都是付诸行动的方法。说到看源码,就应该由简入难,逐渐加深,...
摘要:若遇到哈希冲突,则将冲突的值加到链表中即可。之后相比于之前的版本,之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值默认为时,将链表转化为红黑树,以减少搜索时间。有序,唯一红黑树自平衡的排序二叉树。 本文是最最最常见Java面试题总结系列第三周的文章。主要内容: Arraylist 与 LinkedList 异同 ArrayList 与 Vector 区别 HashMap的底层...
摘要:继承的类,泛型为时,注意和其他的类型不同。因为是线程安全简单来说,是个一维数组。同样,指定和,如果中间发生变化则会抛出异常。最后,可以,然后,使用基类可以实现和的快速赋值。线程安全也是线程安全的,和一样,连函数都丧心病狂地同步了。 这么几个比较常用的但是比较容易混淆的概念同出于 java.util 包。本文仅作几个类的浅度解析。 (本文基于JDK1.7,源码来自openjdk1.7。)...
阅读 1866·2021-11-22 15:25
阅读 1236·2021-11-19 09:40
阅读 1809·2021-09-27 13:57
阅读 972·2021-09-22 15:10
阅读 950·2021-08-16 11:01
阅读 2930·2021-07-23 17:51
阅读 732·2019-08-30 15:55
阅读 806·2019-08-30 13:58