做科技申报看什么网站,做php网站会员开店代码如何编写,潍坊网站建设服务跟,符合网络营销的网站原文参考#xff1a;《编写高质量代码#xff1a;改善java程序的151个建议》本文原创#xff1a;穆雄雄上期文章#xff1a;subList?? subString???上期我们说到#xff0c;List接口提供了subList方法#xff0c;其作用是返回一个列表的子列表。并且我们通过案例说明… 原文参考《编写高质量代码改善java程序的151个建议》本文原创穆雄雄上期文章subList?? subString???上期我们说到List接口提供了subList方法其作用是返回一个列表的子列表。并且我们通过案例说明了一个问题那便是在原来的list集合基础上调用subList产生新的List的时候那么原来的list集合也会随之而改。在看为什么之前我们还是先从subList的源码上说起吧。public ListE subList(int fromIndex, int toIndex) {return (this instanceof RandomAccess ?new RandomAccessSubListE(this, fromIndex, toIndex) :new SubListE(this, fromIndex, toIndex));}
从代码中我们可以看到instanceof的作用就是查看当前的对象是否是RandomAccess的实例如果是则调用RandomAccessSubList方法否则调用SubList方法况且进一步查看源码可以得知RandomAccessSubList类也继承至SubList类所以我们直接来看SubList的源码class SubListE extends AbstractListE {private final AbstractListE l;private final int offset;private int size;SubList(AbstractListE list, int fromIndex, int toIndex) {if (fromIndex 0)throw new IndexOutOfBoundsException(fromIndex fromIndex);if (toIndex list.size())throw new IndexOutOfBoundsException(toIndex toIndex);if (fromIndex toIndex)throw new IllegalArgumentException(fromIndex( fromIndex ) toIndex( toIndex ));l list;offset fromIndex;size toIndex - fromIndex;this.modCount l.modCount;}}
//后面省略其他方法
通过阅读这段代码我们就很清楚的知道SubList方法的实现原理它返回的SubList类也是AbstractList的子类其所有的方法如get、set、add、remove等都是在原始列表上的操作它自身并没有生成一个数组或是链表也就是子列表只是原列表的一个视图View所有的修改动作都反映在了原列表上。所以我们表面上操作的是newList其实操作的还是原来的列表。subList产生的列表只是一个视图所有的修改动作直接作用于源列表。往期精彩“半路出家”的程序猿怎么不被“熊”2020-10-11 某同学工作之后的感悟2020-10-10 班级日常分享一天一瞬间2020-10-10 为了金秋那沉甸甸的麦穗我绝不辜负春天2020-10-09 subList?? subString???2020-10-08 爸妈没多大本事……2020-10-07 点分享点点赞点在看