打字猴:1.700443798e+09
1700443798
1700443799 那是因为有些List实现类不是随机存取的,而是有序存取的,比如LinkedList类,LinkedList也是一个列表,但它实现了双向链表,每个数据结点中都有三个数据项:前节点的引用(Previous Node)、本节点元素(Node Element)、后继节点的引用(Next Node),这是数据结构的基本知识,不多讲了,也就是说在LinkedList中的两个元素本来就是有关联的,我知道你的存在,你也知道我的存在。那大家想想看,元素之间已经有关联关系了,使用foreach也就是迭代器方式是不是效率更高呢?我们修改一下例子,代码如下:
1700443800
1700443801 public static void main(String[]args){
1700443802
1700443803 //学生数量,80万
1700443804
1700443805 int stuNum=80*10000;
1700443806
1700443807 //List集合,记录所有学生的分数
1700443808
1700443809 List<Integer>scores=new LinkedList<Integer>();
1700443810
1700443811 /*其他代码没有改变,不再赘述*/
1700443812
1700443813 }
1700443814
1700443815 public static int average(List<Integer>list){
1700443816
1700443817 int sum=0;
1700443818
1700443819 //foreach遍历求和
1700443820
1700443821 for(int i:list){
1700443822
1700443823 sum+=i;
1700443824
1700443825 }
1700443826
1700443827 //除以人数,计算平均值
1700443828
1700443829 return sum/list.size();
1700443830
1700443831 }
1700443832
1700443833 运行的结果如下:
1700443834
1700443835 平均分是:74
1700443836
1700443837 执行时间:16ms
1700443838
1700443839 确实如此,也是16毫秒,效率非常高。可能大家还想要测试一下下标方式(也就是采用get方法访问元素)遍历LinkedList元素的情况,其实不用测试,效率真的非常低,我们直接看源码:
1700443840
1700443841 public E get(int index){
1700443842
1700443843 return entry(index).element;
1700443844
1700443845 }
1700443846
1700443847 由entry方法查找指定下标的节点,然后返回其包含的元素,看entry方法:
[ 上一页 ]  [ :1.700443798e+09 ]  [ 下一页 ]