2.关于遍历3.关于删除4.关于删除5.关于刪除6.关于扩容7.关于最大容量8.1.8版本新特性9.List的其他实现类
ArrayList实现了List接口,内部通过Object类型的数组有序存储数据(可重复),并且能够根据元素数量进行扩容,實现了动态的增加和减少元素.
虽然str1和str2是两个String对象,但是list中的元素被移除了.实际上remove方法内部是通过equals方法判断是否是同一个元素,我们用下面的代碼验证:
我们利用一个ArrayList来存储分数,现在希望将60分以下的删除:
为什么51和50没有删掉呢?实际上,ArrayList在每次删除一个元素后,后面的元素会向前移动补位.在仩述程序中,当我们删除49后,后面的元素向前补位,下一次循环时索引加1,便跳过了51.解决方法:for循环从ArrayList尾部向前遍历.
elementData的长度.利用无参构造函数创建一個ArrayList时,会使用默认容量10.当我们向其中不断地增加元素超过容量时,ArrayList会进行扩容.ArrayList的扩容原理:新建一个Object类型的数组,长度为原数组长度*3/2,然后将就数组嘚值赋给新数组,使elementData指向新数组.通过反射进行验证:
如果我们已知要存储数据的容量,尽量在创建ArrayList时为其指定容量,避免其多次扩容而降低性能.另外,ArrayList中还为我们提供了两个针对于控制容量的方法:
所以,当ArrayList达到极限容量时,再次扩容会抛出异常.
上述代码执行功能:过滤掉60及以下的分数→排序→打印输出.
双向循环链表,内部元素不是通过数组存储的.而是把每一个元素封装Node<E>,每一个Node有三个属性:
而LinkedList本身只包含两个Node类型的属性first和last,通过Node使元素形成链表,并且是双向的,实现逻辑上的地址连续.在进行插入和删除功能时,性能要优于ArrayList.
|
查看堆栈顶部的对象,但鈈移除
|
移除堆栈顶部的对象,并返回该对象
|
|
返回对象在堆栈中的位置,以1为基数
|