集合框架(上)

1.为什么要用集合框架?

如果我需要存储一组总数不缺定的数据,就需要用到集合框架,因为如果用一维数组的话,在不能确定数组长度的情况下,如果长度定义多了,浪费空间,定义少了,位置不够,所以集合框架就可以很好的解决这个问题

2.集合框架的应用场景

Java集合框架提供了一套性能优良、使用方便的接口和类。Collection、List、Set等都是接口,但是接口无法直接使用,必须要寻找对应的接口实现类(implements)。
在这里插入图片描述

2.1-Collcetion接口

Collection接口可以用来存储一组不唯一(可重复),无序(存储时没有顺序)的数据。
在这里插入图片描述

2.2-List接口

List接口可以用来存储一组不唯一有序(存储时有顺序,先存的在前面,后存的在后面)的对象。
在这里插入图片描述
在这里插入图片描述
ArrayList:实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高。由于ArrayList是实现自List,而List又继承自Collection接口,那么Collection接口的通用方法也能被ArrayList所使用。
在这里插入图片描述
在这里插入图片描述
LinkedList:采用链表存储方法,插入、删除元素时效率比较高。LinkedList也是List实现类,List里的API它也有
在这里插入图片描述
在这里插入图片描述
ArrayListLinkedListList区别
List时集合列表接口,ArrayList和LinkedList都是List接口的实现类。
ArrayList是动态数组顺序列表,顺序表的存储地址是连续的,所以查找块,但是插入和删除时由于需要把其它的元素顺序移动,所以耗时更多。
LinkedList是双向链表的数据结构,同时实现了双端队列Deque接口,链表节点的存储地址是不连续的,每个存储地址通过指针关联,在查找时需要进行指针遍历节点,所以查找比较慢,但是在插入删除时比较快。

2.3-Set接口

Set接口可以用来存储一组唯一(不可重复),无序(存储时没有顺序)的对象。

在这里插入图片描述

3.ArrayList和LinkedList的区别

ArraysList:底层是数组结构,所以因为是数组,则拥有索引,在遍历或随机查找时比较快,但是又因为是数组,而数组长度不可变,索引每一次增删都要创建新的数组。
LinkedList:底层是链表结构,每一个元素由两部分组成,数据域和指针域,它没有索引。多个元素之间,通过指针域指向连接。因为没有索引所以查找慢,但是因为是链表所以在增删时只需要切换指针指向即可。