当前位置:   article > 正文

java vector取值_关于List接口中ArrayList,LinkedList和Vector的取值方法的一些性能测试...

linkedlist取值

对于List接口下的ArrayList,LinkedList和Vector的取值的方式的测试:

对于ArrayList的取值方式的测试:

package com.test.collections.list;

import java.util.ArrayList;

import java.util.Iterator;

/**

*

* ArrayList测试类

* @author work

*

*/

public class TestArraryList{

private static ArrayList strs = new ArrayList();

/**

* 赋值操作

* @param arrays 数组

*/

private static void setValue(String[] arrays){

strs.toArray(arrays);

}

/**

* 赋值操作

*/

private static void setValue(){

for(int i=0; i<10000000; i++){

strs.add("strs"+i);

}

}

private static void iterValue(){

long start = System.currentTimeMillis();

for (Iterator iterator = strs.iterator(); iterator.hasNext();) {

String str = (String) iterator.next();

//System.out.println(" iterator value "+ str);

}

long end = System.currentTimeMillis();

System.out.println(" ArrayList iterValue 耗时 :" + (end-start));

}

private static void forValue(){

long start = System.currentTimeMillis();

for (int i = 0; i 

strs.get(i);

}

long end = System.currentTimeMillis();

System.out.println(" ArrayList forValue 耗时 :" + (end-start));

}

public static void main(String[] args){

setValue();

iterValue();

forValue();

}

}

运行结果如下:

ArrayList iterValue 耗时 :50

ArrayList forValue 耗时 :3

在使用iterator的方式获取值时明显比原始的for循环要慢,是应为ArrayList是List基于数组的实现,而数组通过下标来获取数据是最快的方式。

再看LinkedList的例子:

package com.test.collections.list;

import java.util.Iterator;

import java.util.LinkedList;

public class TestLinkedList {

private static LinkedList strings = new LinkedList();

/**

* 赋值

*/

private static void setValue(){

for(int i=0; i<100000; i++){

strings.add("str"+i);

}

}

/**

* 通过数组赋值

* @param strs

*/

private static void setArrayValue(String[] strs){

strings.toArray(strs);

}

private static void iterValue(){

long start = System.currentTimeMillis();

for (Iterator iterator = strings.iterator(); iterator.hasNext();) {

String str = (String) iterator.next();

//System.out.println(" iterator value "+ str);

}

long end = System.currentTimeMillis();

System.out.println(" linkedList iterValue 耗时 :" + (end-start));

}

private static void forValue(){

long start = System.currentTimeMillis();

for (int i = 0; i 

strings.get(i);

}

long end = System.currentTimeMillis();

System.out.println(" linkedList forValue 耗时 :" + (end-start));

}

public static void main(String[] args) {

//String[] val = new String[]{"dddd","dddss","ssss","ggg","eee"};

//setArrayValue(val);

setValue();

iterValue();

forValue();

}

}

注:在使用LinkedList的时候集合元素个数刚开始也是设置的10000000,但是运行过程中,使用原始for循环的时候,直接内存溢出了,因此元素个数修改为100000;

运行结果如下:

linkedList iterValue 耗时 :6

linkedList forValue 耗时 :11982

在使用iterator是非常的快,而使用原始for循环的时候,性能太差了,究其原因:LinkedList是基于双向链表的实现,在链表中使用指针比使用下标获取数据要快很多;

再看Vector的测试:

package com.test.collections.list;

import java.util.Iterator;

import java.util.Vector;

public class TestVector {

private static Vector strings = new Vector();

/**

* 赋值

* @param arrays

*/

private static void setValue(String[] arrays){

strings.toArray(arrays);

}

/**

* 赋值

*/

private static void setValue(){

for(int i=0; i<10000000; i++){

strings.add("str"+i);

}

}

private static void iterValue(){

long start = System.currentTimeMillis();

for (Iterator iterator = strings.iterator(); iterator.hasNext();) {

String str = (String) iterator.next();

//System.out.println(" iterator value "+ str);

}

long end = System.currentTimeMillis();

System.out.println(" Vector iterValue 耗时 :" + (end-start));

}

private static void forValue(){

long start = System.currentTimeMillis();

for (int i = 0; i 

strings.get(i);

}

long end = System.currentTimeMillis();

System.out.println(" Vector forValue 耗时 :" + (end-start));

}

public static void main(String[] args) {

setValue();

iterValue();

forValue();

}

}

运行结果如下:

元素个数设置为10000000的结果:

Vector iterValue 耗时 :226

Vector forValue 耗时 :438

元素个数设置为100000的结果:

Vector iterValue 耗时 :7

Vector forValue 耗时 :5

首先Vector也是List基于数组的实现,和ArrayList不同的是,Vector是一个线程安全的可变数组;

结果表明:在获取Vector的元素的时候,在结果1中,iterator的方式比原始for循环的方式要快很多,在结果2中则原始for循环比iterator的方式快,在线程安全的环境中,如果数据量过大的时候,使用iterator的方式要比使用原始for循环的方式效果好很多;

ArrayList和Vector的结果比较,在数据量相同的情况下,不管是何种方式,线程安全的要比线程不安全的慢很多,

因此:如果不是多线程环境,不要去使用Vector,使用ArrayList或者LinkedList比较合适,如果是基于链表的实现则使用iterator的方式比较好,如果是基于数组的实现则使用原始的for循环比较好。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/726288
推荐阅读
相关标签
  

闽ICP备14008679号