For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
零基础想学java的同学们,是不是都是去网上看点视频呢?其实小编又个很好的零基础java学习法,就是来昆明达内网站的达内新闻学习课程,这里的老师每天都会和大家分享java学习的技巧哦,看今天我们要学习集合大体系 List了。
【List概念与作用】
List 是一个接口,定义了一组元素是有序的、可重复的集合。
List 继承自 Collection,较之 Collection,List 还添加了以下操作方法
位置相关:List 的元素是有序的,因此有get(index)、set(index,object)、add(index,object)、remove(index) 方法。
搜索:indexOf(),lastIndexOf();
迭代:使用 Iterator 的功能板迭代器
范围性操作:使用 subList 方法对 list 进行任意范围操作。
【List的抽象实现类 AbstractList】
AbstractList 继承自 AbstractCollection 类,实现了 List 接口。整个类的设计类似于AbstractCollection,实现了大多数方法,抽象了对于需要根据数据操作的方法。
【List的实现类】
ArrayList
ArrayList 是我们最常用的一个类,它具有如下特点:
容量不固定,可以动态扩容
有序(基于数组的实现,当然有序~~)
元素可以为 null
效率高
查找操作的时间复杂度是 O(1)
增删操作的时间复杂度是 O(n)
其他操作基本也都是 O(n)
占用空间少,相比 LinkedList,不用占用额外空间维护表结构
从成员变量,我们可以得知
Object[] elementData:数据结构---数组
两个默认空数组,仅在构造方法中使用,不关心
DEFAULT_CAPACITY: 数组初始容量为10
size:当前元素个数
MAX_ARRAY_SIZE:数组最大容量
现在我们知道了 ArrayList 其实就是基于数组的实现。因此,增删改查操作就变得很容易理解了。
get(index)直接获取数组的底 index 个元素
set(index,object)直接修改数组的第 index 个元素的引用
add(index,object)添加一个元素到index,这里会牵涉到数组的扩容,扩容我们后面再单独看
这里的操作很简单,比如说含有8个元素的数组array,要在第五个位置插入一个元素x,则将第[5,8)角标的元素分别往后移动一位变成[6,9),此时角标为5的位置空出来,使 array[5] = x 即可。
remove(object)删除一个元素,删除的过程同添加元素。
现在我们来看看扩容机制,假设我们现在有一个集合 list,里面正好含有10个元素,此时,我们调用 add(object)方法添加一个元素,看看是怎样执行扩容操作的。
扫码加入0元试听课程报名!