单列集合——list集合和五种遍历方式
为什么要有集合(和数组对比)
数组存储的弊端:
数组长度是固定的,一旦创建长度不能变化。
集合:
长度可变,我们只管添加,他内部长度不够会自动扩容加粗样式。
但是数组可以存储基本数据类型和引用数据类型,但是集合不能存储基本数据类型,要存就要使用包装类。
ArrayList集合
基本介绍
成员方法
说明:
add方法:添加完直接返回true,不管加啥都返回true,所以我们一般不用返回值。
remove方法:
当你删除的元素在集合中不存在时返回false。
set方法:
修改元素,将值覆盖,将覆盖之前的元素返回。
单列集合顶层接口Collection
集合体系结构
list和set集合的区别:
Collection集合
注意点:
包含方法:
单列集合遍历方式
引入:Collection的遍历方式:
以前学习的普通for遍历,是用索引把集合里的元素一一获取出来,但是在set系列的集合里是没有索引的,没有索引就无法通过普通for进行遍历,以前普通for的方式只有list系列的才能用,set系列用不了。
所以我们要学习通用的集合遍历方式。
迭代器遍历
最大的特点:不依赖索引的。
代码演示和说明:
获取全部的:
细节
1.当到这个位置了,还强行获取元素会报异常:
没有这个元素异常:
2.迭代器遍历完毕,指针不会复位
到这个位置了,就会一直在这,不会回到开始:
如果想把集合再遍历一遍,只能重新再获取一个迭代器对象。
3.循环中只能用一次next方法
这个方法只能用一次,如果想多次使用当前遍历到的元素,就要使用一个变量去记录,下面直接使用变量就可以了:
4.迭代器遍历时,不能用集合的方法进行增加或者删除
如果使用会报错:并发修改异常。
解决:
看下Iterator迭代器还有哪些方法:
总结:
总结
增强for遍历
lambta表达式遍历
使用forEach方法
list集合特有方法和特有遍历方式
特点
特有方法
代码演示及细节
add:
remove:
list中特有遍历方式
演示之前的
公有的三个:
list特有的:
列表迭代器(list特有)
ListIterator也是一个接口,是上面学习的迭代器的子接口
要掌握的方法:
这两个方法和next方法是反过来的,next方法是从前往后移动迭代器里的指针,这里previous是从后往前反过来去移动。这两个方法不需要掌握了解一下即可。
代码演示:
LinkedList集合
每个节点中都有三部分:
第一部分用来记录前一个节点地址值,
第二部分用来记录真实要存储的数据
第三部分用来记录下一个节点的地址值
这样就可以从头找到尾,利用第一部分地址值也可以从后找到前。
因为链表中操作头和尾速度比较快,所以linkerlist提供很多直接操作首尾元素的特有api。
这些方法混个眼熟就可以了,以后用的不多。