比较ArrayList和LinkedList
比较一:添加内容
涉及方法:add
public void add_test(){ List<Person> addlist = new ArrayList<Person>(); Person p = new Person("阿呆",20);
long begin = System.currentTimeMillis(); System.out.println("ArrayList 开始时间:"+begin); for(int i=0; i<10000000; i++){ addlist.add(p); // System.out.println("第"+i+"个"+"所用时间:"+(System.currentTimeMillis()-begin)); } long over = System.currentTimeMillis(); System.out.println("ArrayList 结束时间:"+over); System.out.println("ArrayList 最终时间:"+(over-begin)); }
注:这是ArrayList的测试代码,但是测LinkedList只要把addlist的类型改一下就行,改成LinkedList
结果:
ArrayList
LinkedList
显然在插入10000000条数据时,耗时ArrayList < LinkedList
比较二:获取内容
涉及方法:get、contains、indexOf、lastIndexOf
1、get测试
public void get_test(){ //准备工作,添加一堆阿呆,添加一个阿傻 List<Person> getlist = new ArrayList<Person>(); Person p = new Person("阿呆",20); for(int i=0; i<10000000; i++){ getlist.add(p); } Person p2 = new Person("阿傻",20); getlist.add(77777,p2); System.out.println("添加完成"); // get 测试 long begin = System.currentTimeMillis(); System.out.println("get测试开始时间:"+begin); getlist.get(7777777); long over = System.currentTimeMillis(); System.out.println("get测试结束时间:"+over); System.out.println("get测试最终时间:"+(over-begin)); }
结果
ArrayList
LinkedList
2、contains测试
// contains 测试 long begin = System.currentTimeMillis(); for(int i=0; i<10000; i++){ getlist.contains(p2); } long over = System.currentTimeMillis(); System.out.println("contains测试最终时间:"+(over-begin));
注:只要把上面测试add的那段代码换成这段,就可以测试contains,准备工作的代码不变
结果
ArrayList
LinkedList
3、indexOf测试
// indexOf 测试 long begin = System.currentTimeMillis(); for(int i=0; i<10000; i++){ getlist.indexOf(p2); } long over = System.currentTimeMillis(); System.out.println("indexOf测试最终时间:"+(over-begin));
结果
ArrayList
LinkedList
4、lastIndexOf测试
// lastIndexOf 测试 long begin = System.currentTimeMillis(); for(int i=0; i<100; i++){ getlist.lastIndexOf(p2); } long over = System.currentTimeMillis(); System.out.println("lastIndexOf 测试最终时间:"+(over-begin));
结果
ArrayList
LinkedList
小结:
get:ArrayList < LinkedList,差别很大
contains:ArrayList < LinkedList,差别不那么大,以下两个也是
indexOf:ArrayList < LinkedList
lastIndexOf:ArrayList < LinkedList
比较三:删除内容
涉及方法:remove(根据索引)、remove(根据对象)
1、remove(根据索引)
public void remove_test(){ //准备工作,添加一堆阿呆 List<Person> getlist = new ArrayList<Person>(); Person p = new Person("阿呆",20); for(int i=0; i<10000000; i++){ getlist.add(p); } System.out.println("添加完成"); // remove(int index) 测试 System.out.println(getlist.size()); long begin = System.currentTimeMillis(); for(int i=0; i<10000000; i++){ getlist.remove(getlist.size()-1); } long over = System.currentTimeMillis(); System.out.println("remove(int index) 测试最终时间:"+(over-begin)); System.out.println(getlist.size());
}
结果
ArrayList
LinkedList
2、remove(根据对象)
// remove(Object o) 测试 System.out.println(getlist.size()); long begin = System.currentTimeMillis(); for(int i=0; i<999; i++){ getlist.remove(p); } long over = System.currentTimeMillis(); System.out.println("remove(Object o) 测试最终时间:"+(over-begin)); System.out.println(getlist.size());
结果
ArrayList
LinkedList
小结:
remove(根据索引):ArrayList < LinkedList,差别不大
remove(根据对象):ArrayList > LinkedList,差别非常大
进一步
在插入内容时候:根据有无指定插入位置
ArrayList
LinkedList
根据插入位置的不同
ArrayList
LinkedList
在获取内容的时候,根据索引位置在整个集合的前面、中间、后面的不同
ArrayList
LinkedList
在移除内容的时候,根据索引位置在整个集合的前面、中间、后面的不同
ArrayList
LinkedList
小结:
在插入内容时候:
根据有无指定插入位置,
ArrayList:有索引更慢
LinkedList:差不多
根据插入位置的不同
ArrayList:位置越往后越慢
LinkedList:前面的最快,后面的较慢,中间的最慢
在获取内容的时候,
根据索引位置在整个集合的前面、中间、后面的不同
ArrayList:差不多
LinkedList:索引越后面越慢
在移除内容的时候,
根据索引位置在整个集合的前面、中间、后面的不同
ArrayList:差不多
LinkedList:索引越后面越慢