打字猴:1.700444267e+09
1700444267 SubList(AbstractList<E>list, int fromIndex, int toIndex){
1700444268
1700444269 /*下标校验,省略*/
1700444270
1700444271 //传递原始列表
1700444272
1700444273 l=list;
1700444274
1700444275 offset=fromIndex;
1700444276
1700444277 //子列表的长度
1700444278
1700444279 size=toIndex-fromIndex;
1700444280
1700444281 }
1700444282
1700444283 //获得指定位置的元素
1700444284
1700444285 public E get(int index){
1700444286
1700444287 /*校验部分,省略*/
1700444288
1700444289 //从原始字符串中获得指定位置的元素
1700444290
1700444291 return l.get(index+offset);
1700444292
1700444293 }
1700444294
1700444295 //增加或插入
1700444296
1700444297 public void add(int index, E element){
1700444298
1700444299 /*校验部分,省略*/
1700444300
1700444301 //直接增加到原始字符串上
1700444302
1700444303 l.add(index+offset, element);
1700444304
1700444305 /*处理长度和修改计数器*/
1700444306
1700444307 }
1700444308
1700444309 /*其他方法省略*/
1700444310
1700444311 }
1700444312
1700444313 通过阅读这段代码,我们就非常清楚subList方法的实现原理了:它返回的SubList类也是AbstractList的子类,其所有的方法如get、set、add、remove等都是在原始列表上的操作,它自身并没有生成一个数组或是链表,也就是子列表只是原列表的一个视图(View),所有的修改动作都反映在了原列表上。
1700444314
1700444315 我们例子中的c2增加了一个元素C,不过增加的元素C到了c列表上,两个变量的元素仍保持完全一致,相等也就很自然了。
1700444316
[ 上一页 ]  [ :1.700444267e+09 ]  [ 下一页 ]