Vector和ArrayList异同如下
存储方式看
Vector与ArrayList想相比 vector的安全系数更高
ArrayList的采用数组的方式实现存储数据,实现了可以改变数组的大小 ,它允许然后元素 (包括null)
特点:
(1)ArrayList没有同步。
(2)此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢。
2、Vector也是采用数组方式存储数据,由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差。
List v=new ArrayList();
v.add("a");
v.add("b");
v.add("c");
Iterator i=v.iterator();
while(i.hasNext()) {
System.out.println(i.next());
}
}
其特点:
(1)Vector是同步的
Vector v=new Vector();
v.add("a");
v.add("b");
v.add("c");
Iterator i=v.iterator();
while(i.hasNext()) {
System.out.println(i.next());
}
(2)由Vector创建的Iterator,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
LinkedList和ArrayList异同如下
差别与运用
arraylist类似数组,linkedlist类似链表,数组的优势是读取访问时可以根据索引直接找到,所以在读取的时候相比linkedlist快,但是删除需要逐个移动,而linkedlist再删除的时候只需要修改下指针然后释放掉要删除的内容就可以了,所以一般用arrayList用作读取比较多的时候,而linkedList用在删除比较多的时候。
static final int s = 50000;
static long timeList(List list) {
long start = System.currentTimeMillis();
Object o = new Object();
for (int i = 0; i < s; i++) {
list.add(0, o);
}
return System.currentTimeMillis() - start;
}
static long readList(List list) {
long start = System.currentTimeMillis();
for (int i = 0, j = list.size(); i < j; i++) {
}
return System.currentTimeMillis() - start;
}
static List addList(List list) {
Object o = new Object();
for (int i = 0; i < s; i++) {
list.add(0, o);
}
return list;
}
public static void main(String[] args) {
System.out.println("ArrayList添加" + s + "条耗时:" + timeList(new ArrayList()));
System.out.println("LinkedList添加" + s + "条耗时:" + timeList(new LinkedList()));
List list = addList(new ArrayList<>());
List list1 = addList(new LinkedList<>());
System.out.println("ArrayList查找" + s + "条耗时:" + readList(list));
System.out.println("LinkedList查找" + s + "条耗时:" + timeList(list1));
}