刚学习java不久,对java的理解还是不够深刻,很多东西都是边学边忘了,非常苦恼。所以,我决定,要把自己的理解都记录下来。
这是我写的第一篇博文,写的不是很好,请见谅。
对集合框架的基本理解
什么是集合框架?
在我的理解中,首先,集合框架是用来储存“东西”的。
集合框架的老大,Collection接口表示表示一组对象,所以可以理解为,集合框架就是用来储存对象的。
我曾看过谋篇博文上说的一句话非常好“在java中,通常用数组在储存对象或其他数据。
但是,在程序运行的过程中,我们并不知道程序会产生多少对象,所以用定长的数组来储存对象是不现实的”。
于是,便有了集合框架,动态的可变长度的数组。通常会有个初始长度值,当数组长度达到某个长度之后,就会自动扩容。
Colletion表示的是一种规范,表示的是可以储存数据的一种规范
List:
List 继承于Colletion 接口,List接口的规范是有序,可以重复,实现类ArrayList底层实现其实就是一个可变长度的一维数组。
因为数组在乎的是索引不重复,对储存的内容并不关心。所以储存的对象可以重复。
在查询和修改操作中,只需要输入索引位置查找即可,所以效率相对较高。
但是在增加或者删除的过程中,都要进行数组拷贝的工作,说不定还要进行数组扩容,所以效率相对较低。
LinkedList 链表结构,储存数据方式比较特殊,通过一个个节点进行连接,因为某个节点的上一个节点和下一个节点都是确定的,所以它也是有序的,同样,通过节点连接,数据结构的侧重点更多的是在于连接而不是节点,所以节点中有什么内容,并不关心,所以它也是可以重复的。在添加和删除的操作中,只需要将节点拆除或者连接即可,无需进行数组扩容及拷贝等操作,因为它根本就不是靠数组进行数据储存的。只需要操作少量步骤即可完成操作。所以在添加和删除上,LinkedList效率还是挺高的。
但是在查询和修改操作中,只能通过各个节点从头遍历到想要查询的位置。如果链表足够长的话,肯定会比较耗时的。所以查询和修改的操作对于LinkedList来说,效率相对较低。
什么时候选择ArrayList/LinkedList?
两者都遵循一个规则。有序,可重复,所以两者都只有在有序可重复的环境中才试用。
如果是修改和删除操作用的比较频繁的时候,就应当选用LinkedList。
如果是对于查询和修改需求比较大的时候,就应当选用ArrayList。