一,集合类型
1.单列集合Collection
2.双列集合Map:每个元素包含两个值(键值对)
二,单列集合体系
1.List(元素是有序的,可重复的,有索引的)
(1)ArrayList
(2)LinkedList
2.Set
(1)HashSet:元素是无序的,不重复的,无索引
(2)LinkedHashSet:元素是有序的,不重复的,无索引
(3)TreeSet:元素按照大小默认升序排序,不重复的,无索引
三,Collection的遍历方式
1.迭代器遍历
(1)概述:是用来遍历集合的专用方法,在Java中迭代器的代表是Iterator
(2)Collection获取迭代器的方法:iterator()
(3)Iterator迭代器中常用方法
①hasNext():查询当前位置是否有元素存在
②next():获取当前位置的元素,并同时将迭代器对象指向下一个元素
2.增强for循环
格式:for(元素的数据类型 变量名:数组或者集合){}
3.Lambda表达式
格式:forEach(){}
4.集合遍历常见问题
(1)迭代器
①错误:使用迭代器遍历集合时,同时通过集合对象删除集合中的数据,程序就会出现并发修改异常的错误
②解决方法:用迭代器自己的删除方法
(2)增强for循环
①错误:增强for循环底层依赖迭代器,所以会和迭代器出现一样的错误
②无解决办法
(3)普通for循环
①错误:使用普通for循环,删除相同元素会出现漏删
②解决办法:从后往前遍历,然后删除或者正常遍历,在成功删除一个元素时,i--
四,List
1.List特有方法(List集合有索引)
(1)根据索引增加:add(int index,E element)
(2)根据索引删除:remove(int index)
(3)根据索引修改:set(int index,E element)
(4)根据索引查询:get(int index)
2.遍历方法:除了Collection的三种方法,List集合还特有普通for循环
3.ArrayList集合的底层原理
(1)ArrayList是基于数组实现的
(2)特点
①根据索引查询速度快
②删除效率低
③添加效率极低
(3)底层原理
①利用无参构造器创建集合的时候,会在底层创建一个默认长度为0的数组
②添加第一个元素时,底层会创建一个新的长度为10的数组
③存满时,会扩容1.5倍
④如果一次添加多个元素,扩容1.5倍还放不下,则新创建数组的长度以实际为准
(4)应用场景:根据索引查询数据,或者根据随机索引抽取数据,或者数据量不是很大的时候
4.LinkedList底层原理
(1)LinkedList是基于双向链表实现的
(2)特点
①查询速度慢
②增删速度相对快
③LinkedList新增了很多首尾操作的特有方法,所以对首尾元素进行增删改查速度是极快的
(3)应用场景
①符合队列结果的数据存储(先进先出,后进后出)
②符合堆栈结构的数据存储(先进后出,后进先出)