网站架构包括哪些,我是怎么做网站架构的,asp.net网站项目建设,网站建设 中企动力 顺德1.ArrayList和Vector的区别
第一句话#xff1a;ArrayList和Vector底层都是数组实现的#xff0c;初始容量都为10#xff1b;在ArrayList的底层#xff0c;是通过定义一个DEFAULT_CAPACITY的常量来指定的#xff0c;而Vector的底层#xff0c;是直接在空参构造中#x…1.ArrayList和Vector的区别
第一句话ArrayList和Vector底层都是数组实现的初始容量都为10在ArrayList的底层是通过定义一个DEFAULT_CAPACITY的常量来指定的而Vector的底层是直接在空参构造中通过写死了一个this(10)来指定的
第二句话Vector大部分方法的底层实现,都加了 synchronized关键字所以Vector是线程同步的而 ArrayList不是
第三句话在查看API时发现Vector有4个构造方法比 ArrayList多了一个。而多的这个构造方法是跟扩容有关的。ArrayList默认的扩容在JDK1.6时是按照新容量 原容量*3/21来计算的大约50%左右而在JDK1.7以后是按照新容量 原容量 原容量 1来计算的大约也在50%左右所以都不是很多资料上说的就是50%,同时由于位运算的速度比快所以ArrayList在JDK1.7之后效率更高也可以看出来而在Vector中默认情况下是100%增长的但是我们可以通过比ArrayList多的那个构造方法来指定它增容的大小。
2.ArrayList与LinkedList
第一句话ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结构它继承于AbstractSequentialList的双向链表由于AbstractSequentialList 实现了get(i)、set()、add() 和 remove()这些骨干性函数这也降低了List接口的复杂程度。
第二句话ArrayList与LinkedList都是不是同步的。如果多个线程同时访问一个链接列表而其中至少一个线程从结构上修改了该列表则它必须保持外部同步。同步的方法就是使用Collections.synchronizedList(CollectionT c)来“包装”该列表。
第三句话对于随机访问get和setArrayList绝对优于LinkedList因为从源码可以看出ArrayList想要get(int index)元素时直接返回index位置上的元素而LinkedList需要通过for循环进行查找虽然LinkedList已经在查找方法上做了优化比如index size / 2则从左边开始查找反之从右边开始查找但是还是比ArrayList随机查找要慢。
第四句话从源码来看ArrayList想要在指定位置插入或删除元素时主要耗时的是System.arraycopy动作会移动index后面所有的元素LinkedList主耗时的是要先通过for循环找到index然后直接插入或删除。这就导致了两者并非一定谁快谁慢