数组:
优点:数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很 简单。
缺点:在数组的两个数据间插入数据也是很麻烦的,还有我们在声明数组的时候,必须同时指明数组的长度
List:
list是一个接口
常用的有两种List: 一种是基于数组实现的ArrayList,其优点在于随机访问元素,另一种是基于链表的的LinkedList,优点在于增加删除元素。
ArrayList:
基于数组实现的List。
优点:动态分配内存大小
缺点:在list中,我们不仅插入了字符串”abc”,而且又插入了数字123。这样在ArrayList中插入不同类型的数据是允许的。因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。
LinkedList:
LinkedList基于链表的数据结构
比较一下ArrayList和LinkedList:
1.ArrayList是基于数组,LinkedList基于链表实现。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。
这里只是理论上分析,事实上也不一定,比如ArrayList在末尾插入和删除数据就不设计到数据移动,不过还是
有这么个建议:随机访问比较多的话一定要用ArrayList而不是LinkedList,如果需要频繁的插入和删除应该
考虑用LinkedList来提高性能。
总结:
写法一:List list=new ArrayList();
写法二:ArrayList list=new ArrayList();
如果List接口的方法能够满足要求,则尽量用List引用。这样体现了面向接口编程的思想,限制了开发方法,以后如果需要更改实现类,代码改起来会轻松些。