ArrayList和LinkedList测试性能差异
原创
©著作权归作者所有:来自51CTO博客作者虾米大王的原创作品,请联系作者获取转载授权,否则将追究法律责任
package com.shrimpking.t11;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2024/9/10 12:13
*/
public interface Test
{
void test();
}
package com.shrimpking.t11;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2024/9/10 12:13
*/
public class Tester
{
public static long runTest(Test t){
//毫秒
long start = System.currentTimeMillis();
t.test();
long end = System.currentTimeMillis();
return end - start;
//纳秒
// long start = System.nanoTime();
// t.test();
// long end = System.nanoTime();
// return end - start;
}
}
package com.shrimpking.t11;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2024/9/10 12:15
*/
public class ListTest
{
public static <E> void testSuite(List<Integer> list){
long addTime,getTime,setTime,removeTime;
System.out.println("count\taddTime\tgetTime\tsetTime\tremoveTime\t");
//在列表索引为0的位置添加1000个整数
addTime = Tester.runTest(new Test()
{
@Override
public void test()
{
for (int i = 0; i < 1000; i++)
{
list.add(0,i);
}
}
});
//根据索引位置依次访问1000个元素
getTime = Tester.runTest(new Test()
{
@Override
public void test()
{
for (int i = 0; i < 1000; i++)
{
list.get(i);
}
}
});
//从0到1000的索引处不断修改元素的值
setTime = Tester.runTest(new Test()
{
@Override
public void test()
{
for (int i = 0; i < 1000; i++)
{
list.set(i,8888);
}
}
});
//始终删除索引为0位置的元素
removeTime = Tester.runTest(new Test()
{
@Override
public void test()
{
for (int i = 0; i < 1000; i++)
{
list.remove(0);
}
}
});
System.out.printf("%d\t%d\t%d\t%d\t%d\n",1000,addTime,getTime,setTime,removeTime);
}
public static void main(String[] args)
{
ArrayList<Integer> arrayList = new ArrayList<>();
LinkedList<Integer> linkedList = new LinkedList<>();
System.out.println("Test ArrayList:");
testSuite(arrayList);
System.out.println("------------------");
System.out.println("Test LinkedList:");
testSuite(linkedList);
}
}