美文网首页
ArrayList知识点

ArrayList知识点

作者: AegeanSea_d32a | 来源:发表于2018-01-15 21:17 被阅读0次

    集合中元素的删除元素要左移,集合中元素添加集合长度要扩充并且元素要右移

    集合的层次关系

     Collection (子集和   List和Set)

                List:有序可重复 

                         ArrayList 

                         LinkedList 

                         Vector

                Set:无序不可重复(无序是和输入的顺序无关,默认顺序是从小到大)                         HashSet 

                         TreeSet 

     查询快, 增删慢的原理:

                查询快:

                    ArrayList底层维护是一个Object类型的数组,可以完成使用数组的下标机制来访问数据,这种访问形式是非常快的

                增加慢:

                    是因为在添加数据的时候,有可能导致ArrayList底层的Object数组的元素个数不够用,那么会调用数组的扩容方法 grow,而扩容方法,是创建了一个新的数组,数组的元素个数大于是老数组的1.5倍,这里会利用一些方法,把老数组里面的元素完完整整的拷贝的到新数组,这个拷贝过程很占用时间和内存

                删除慢:

                    因为删除某一个元素,会导致数组中该元素之后的数据,做一个整体的左移,这里也是一个数组的拷贝过程,整个过程非常浪费时间

    面试题:

    1.如果调用了ArrayList的无参构造方法,那么请问底层维护的Object数组默认的元素个数是多少?如果是调用这个方法呢newArrayList(8);答:默认元素个数为10,如果调用了newArrayList(8)Object数组,元素个数为8

    2.ArrayList是一个可以自增长的空间,请问,增长的原理是什么?增长的长度是多少?ArrayList底层维护的是一个Object数组,默认元素为10,如果添加元素时,当前需求的元素空间超出了Object数组的元素个数,会调用底层的grow,进行数组元素的扩容和拷贝扩容量是大约1.5倍

                新元素个数 = 老元素个数 + (老元素个数 >>1);newCapacity = oldCapacity + (olcCapacity >>1);

    相关文章

      网友评论

          本文标题:ArrayList知识点

          本文链接:https://www.haomeiwen.com/subject/cgadoxtx.html