6. ArrayList第三讲
索引(下标)是从0开始的
.indexOf()
方法用于查找元素首个下标
.lastIndexOf()
方法用于查找元素最后一个下标
.isEmpty()
方法用于检查集合是否为空
.remove()
方法用于删除元素,默认根据下标删除,可以根据object
和index
删除
.removeAll()
方法用于移除所有元素
.replaceAll()
方法用于替换所有元素
.toLowerCase()
用于转换成小写
.toUpperCase()
用于转换成大写
.retainAll()
方法用于取交集
.set()
方法用于给指定的下标元素设置值
.sort()
方法用于排序,默认从小到大
.reverse()
方法用于置反集合
.subList()
方法用于切割容器,需要注意截止于前一个元素
7. Linked链表
ArrayList
数组集合,增删慢,查询快
LinkedList
链表集合,增删快,查询慢
8. LinkedList一带而过
- 链表是数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址
- 链表可分为单向链表和双向链表
- Java
LinkedList
类似于ArrayList
,是一种常用的数据容器
9. 提醒
- 多看JDK文档,多练习,把基础打好
10. iterator 迭代器初试
- 迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需目标或结果
- 每一次对过程的重复被称为一次“迭代”,而每一次迭代的结果会被用来作为下一次迭代的初始值
迭代器Iterator
,不管用于ArrayList
还是LinkedList
都可以迭代输出
迭代器类似用链表的形式去迭代,也可以指定泛型
11. fori、增强for、迭代器的区别、注意事项和分别用途
fori
适合数据的读取与修改
for each
适合数据的读取
Iterator
不要使用嵌套,适合数据的读取与修改
for each
绝对不能与.remove()
方法一起使用,危险会导致所有数据删除
for each
已经是一个小型的迭代器了,如果一定要修改集合的话可以使用迭代器,但不建议在for each
中使用对象引用去修改元素
12. 谈谈三者性能
比较时间复杂度,foreach和迭代器谁更快呢?
- 如果是
ArrayList
,用三种方式遍历的速度是for
>Iterator
>foreach
,速度级别基本一致,一般都会用for
或者for each
,因为Iterator
写法相对复杂一些
- 如果是
LinkedList
,则三种方式遍历的差距很大了,数据量大时越明显,Iterator
>foreach
>>>for
,推荐使用foreach
或者Iterator
参考:List遍历:for,foreach Iterator 速度比较
13. Set和HashSet
HashSet
基于HashMap
来实现的,是一个不允许有重复元素的集合,允许有 null 值,是无序的,即不会记录插入的顺序
HashSet
不是线程安全的, 如果多个线程尝试同时修改HashSet
,则最终结果是不确定的,必须在多线程访问时显式同步对HashSet
的并发访问
HashSet
实现了 Set
接口
使用Hash
函数实现HashSet
,元素无序,且不重复
14. LinkedHashSet
如果要创建有序集合呢?LinkedHashSet
便是有序的
15. Map、HashMap、Entry
java.util.Map下的接口和继承类关系简易结构图:
HashMap
是映射关系,即键Key
值Value
对
HashMap
不能使用迭代器Iterator
.replace()
方法可以替换键Key
对应的值Value
让Key
以集合形式输出,.keySet()
方法返回值是HashMap
中Key
值的集合
让HashMap
以集合形式输出, .entrySet()
方法的返回值也是Set集合
16. Map注意点
已经存在的键值对,再次.put()
会替换原来的,.get()
不存在的值会返回null
17. Entry与Map转换Set之后遍历: Iterator<Entry<Integer,Integer>> iterator = entrySet.iterator(); (什么?看不懂这行?)
Entry
就是用来管理键值对对象的,将对象包裹起来,提供遍历的方式
Entry
可以使用迭代器,筛选值,但只适合在内存中使用,不适用于JDBC
18. 提及 LinkedHashMap以及课后作业
HashMap
是无序的,可以自定义泛型,而LinkedHashMap
相当于有序的HashMap
,可以自己写一个包括增删改查的学生管理系统了
19. 集合框架部分结束
剩下的类需要自己去学习了!了解各类是怎么实现的,以及其之间的区别,JDK的新特性暂时用不到,还没学习到框架