Vector:Vector 类可以实现可增长的对象数组。
○父接口:List
○ Vector 是同步的。 (效率低,安全)
○ jdk 1.0
○ 与ArrayList非常相似,但ArrayList是不同步的(不安全,效率高)
jdk升级的原因
○ 1:新的功能要增加
○ 2:旧的方法名太长
○
面试题:
1. Vector & ArrayList
—1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe)
而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
— 2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,
而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
2. Hashtable & HashMap
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,
比如Hashtable的方法是同步的,而HashMap的不是。
3. ArrayList & LinkedList
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,
但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:
从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,
所以,当你的操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,
使用ArrayList会提供比较好的性能;
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,
所以,当你的操作是在一列数据的前面或中 间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
public static void main(String[] args) {
Vector vt = new Vector<>();
vt.addElement("a");//自己的
vt.addElement("b");
vt.addElement("c");
vt.add("d");//父接口
vt.removeElementAt(0); //自己的
vt.remove(0);//父接口
vt.setElementAt("p", 0); //自己的
vt.set(0, "y"); //父接口
System.out.println("---------------");
//自己的遍历方式
Enumeration els = vt.elements();
while(els.hasMoreElements()){
System.out.println(els.nextElement());
}
System.out.println("---------------");
//迭代器
Iterator it = vt.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println(vt);
}