国内最专业的IT技术学习网

UI设计

当前位置:主页 > 亚博体育app手机版 >

为什么阿里巴巴要求谨慎使用ArrayList中的subList方

发布时间:2019/06/26标签:   方法    点击量:

原标题:为什么阿里巴巴要求谨慎使用ArrayList中的subList方
聚集是Java开辟平常开辟中常常会应用到的。在之前的一些文章中,咱们先容过一些对于应用聚集类应当留神的事项,如《为甚么阿里巴巴制止在 foreach 轮回里停止元素的 remove/add 操纵》、《为甚么阿里巴巴倡议聚集初始化时,指定聚集容量巨细》等。对于聚集类,《阿里巴巴Java开辟手册》中实在另有别的一个划定:本文就来剖析一下为甚么会有如斯倡议?其背地的道理是甚么?1.subListsubList是List接口中界说的一个方式,该方式重要用于前往一个聚集中的一段、能够懂得为截取一个聚集中的局部元素,他的前往值也是一个List。如以下代码:publicstaticvoidmain(String[]args){Listnames=newArrayList(){{add("Hollis");add("hollischuang");add("H");}};ListsubList=names.subList(0,1);System.out.println(subList);}以上代码输入成果为:[Hollis]假如咱们修改下代码,将subList的前往值强转成ArrayList试一下:publicstaticvoidmain(String[]args){Listnames=newArrayList(){{add("Hollis");add("hollischuang");add("H");}};ArrayListsubList=names.subList(0,1);System.out.println(subList);}以上代码将抛出异样:java.lang.ClassCastException:java.util.ArrayList$SubListcannotbecasttojava.util.ArrayList不仅是强转成ArrayList会报错,强转成LinkedList、Vector等List的完成类一样也都市报错。那末,为甚么会产生如许的报错呢?咱们接上去深刻剖析一下。2.底层道理起首,咱们看下subList方式给咱们前往的List究竟是个甚么货色,这一点在JDK源码中解释是如许说的:Returns a view of the portion of this list between the specifiedfromIndex, inclusive, and toIndex, exclusive.也就是说subList 前往是一个视图,那末甚么叫做视图呢?咱们看下subList的源码:publicListsubList(intfromIndex,inttoIndex){subListRangeCheck(fromIndex,toIndex,size);returnnewSubList(this,0,fromIndex,toIndex);}这个方式前往了一个SubList,这个类是ArrayList中的一个外部类。SubList这个类中独自界说了set、get、size、add、remove等方式。当咱们挪用subList方式的时间,会经过挪用SubList的结构函数创立一个SubList,那末看下这个结构函数做了哪些事件:SubList(AbstractListparent,intoffset,intfromIndex,inttoIndex){this.parent=parent;this.parentOffset=fromIndex;this.offset=offset+fromIndex;this.size=toIndex-fromIndex;this.modCount=ArrayList.this.modCount;}

上一篇:JavaScript会是Web开发的未来吗?

下一篇:没有了

返回
版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号