1700443860
1700443861
e=e.next;
1700443862
1700443863
}else{
1700443864
1700443865
//如果下标大于等于中间值,则从尾节点反向遍历
1700443866
1700443867
for(int i=size;i>index;i—)
1700443868
1700443869
e=e.previous;
1700443870
1700443871
}
1700443872
1700443873
return e;
1700443874
1700443875
}
1700443876
1700443877
看懂了吗?程序会先判断输入的下标与中间值(size右移一位,也就是除以2了)的关系,小于中间值则从头开始正向搜索,大于中间值则从尾节点反向搜索,想想看,每一次的get方法都是一个遍历,“性能”两字从何说起呢!
1700443878
1700443879
明白了随机存取列表和有序存取列表的区别,我们的average方法就必须重构了,以便实现不同的列表采用不同的遍历方式,代码如下:
1700443880
1700443881
public static int average(List<Integer>list){
1700443882
1700443883
int sum=0;
1700443884
1700443885
if(list instanceof RandomAccess){
1700443886
1700443887
//可以随机存取,则使用下标遍历
1700443888
1700443889
for(int i=0,size=list.size();i<size;i++){
1700443890
1700443891
sum+=list.get(i);
1700443892
1700443893
}
1700443894
1700443895
}else{
1700443896
1700443897
//有序存取,使用foreach方式
1700443898
1700443899
for(int i:list){
1700443900
1700443901
sum+=i;
1700443902
1700443903
}
1700443904
1700443905
}
1700443906
1700443907
//除以人数,计算平均值
1700443908
1700443909
return sum/list.size();
[
上一页 ]
[ :1.70044386e+09 ]
[
下一页 ]