List和它的实现类的问题

List和它的实现类的问题

既然说List list= new ArrayList()是把一个创建的ArrayList对象向上转型到List

又说道现在使用ArrayList 以后使用LinkedList时方便更改

可是不是最后都转型到了List,而且只能用List的属性方法,那么这种方便更改有什么作用呢?

转型为List又不能使用ArrayList独有的方法属性,那么为什么又要说以后使用其他的List实现类方便更改?



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕酷酷 2019-11-20 12:34:05

同学你好,对于上述同学的描述是正确的,

另外,对于ArrayList和LinkList是有区别的,这里同学可以这样理解,具体如下:

1、数据结构不一样:ArrayList基于动态数组的数据结构,LinkedList基于链表的数据结构

2、在进行大规模的数据集合时,对于随机访问集合中的元素时,ArrayList的效率优于LinkedList,这是因为对LinkedList进行随机访问时,总会进行一次列表的遍历操作,所以性能比较低。而ArrayList底层是数组,可以直接通过数组下标进行获取,效率比较高。

3、在进行大规模的数据集合时,对于新增和删除操作add和remove,LinedList的效率比较高,因为如果在数组的任意位置插入活着删除元素,必然导致在该位置后的所有元素需要重新排列,因此,其效率相对会比较低。

4、所以在集合中存在大量数据时,如果只是查找对集合中某一位置的元素,建议使用ArrayList,而如果是对指定位置插入或者删除,则需要使用LinkedList。

所以也就是,代码编写后发现集合使用的不准确时,

例如:在集合中存在大量数据时,要进行删除元素,但使用的是ArrayList,后来发现使用的不正确,应该使用LinkedList,那么只要修改一行代码List list = new LinkedList();就可以。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

提问者 mixiaofan 2019-11-20 11:57:24

http://img1.sycdn.imooc.com//climg/5dd4b63a09b376ec11130289.jpg是不是类似继承和多态中的向上造型,虽然是List list = new ArraList();但本质是一个List对象指向ArrayList实例,然后list调用的是ArrayList类中实现(重写)的List接口中的方法?

后来在之前接口的代码中看到类似的

http://img1.sycdn.imooc.com//climg/5dd4b99209f41c2107960528.jpg不知道这么想对不对

好帮手慕酷酷 2019-11-20 11:08:03

同学你好,可以这样理解:

首先区分一下ArrayList arr = new ArrayList();和List list = new ArrayList();的区别:

ArrayList arr = new ArrayList();:用当前类作为引用类型,那么可以访问到ArrayList这个类中的所有公用方法。

List list = new ArrayList();:用ArrayList实现的接口List作为引用类型,那么通过list引用可以访问到接口中定义的方法。也就是说ArrayList这个类实现了List接口,除了ArrayList需要实现接口List中声明的方法外,还可以实现额外的一些方法。但list 对象无法调用的List接口以外的方法。

建议使用List list = new ArrayList();的方式,可以让代码更加有扩展性,方便修改的原因,如下:

例如:代码List list = new ArrayList();下面通过list来操作集合。代码编写后发现集合使用的不准确,应该使用LinkedList,那么只要修改一行代码List list = new LinkedList();就可以,这行以后的代码不需要修改,因为List接口保证了调用的都是接口中的方法,而ArrayList与LinkedList都实现了List接口。而如果当时用ArrayList list = new ArrayList()这种形式的话,那么list访问到的就可能是ArrayList里独有的方法而非List接口中的方法。这样替换成LinkedList的时候就有可能需要修改很多的代码。

老师所要描述的是上述的意思,但具体使用ArrayList arr = new ArrayList();或者List list = new ArrayList();还要以具体项目实际的需求而定。但更建议使用List list = new ArrayList();的方式,可以让代码更加有扩展性。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 mixiaofan #1
    " -----代码编写后发现集合使用的不准确,应该使用LinkedList,那么只要修改一行代码List list = new LinkedList();就可以----- " 能不能举个集合使用不准确的例子呢,我有点不明白的在于,创建的实现类的对象最后不都是转型到了List,然后不是才向list中添加数据,,那在此之前是没有集合的对象不是吗,那不论实现类是ArrayList还是LinkedList好像都没有什么区别吧?
    2019-11-20 11:14:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师