集合
1. 集合和数组的异同
a. 和数组一样都是容器
b. 集合可以自动扩容,数组长度固定
c. 存储数据类型的特点
i. 数组可以存基础数据类型和引用数据类型
ii. 集合只能存引用数据类型,不能直接存储基础数据类型,要使用包装类
2. 集合的基本使用
a. ArrayList
i. 成员方法
1) 增删改查
b. 泛型
i. 限定集合中存储对象数据的类型
ii. ArrayList<String> list = new ArrayList<>()
3. 集合练习
a. 添加字符串和整数并遍历
b. 添加学生对象并遍历
i. 存储的是地址值,使用循环生成对象集合时,应将对象实例放在循环以内
c. 查找用户是否存在
d. 返回多个数据
4. 实战:学生管理系统
集合进阶
集合体系结构
Collection单列集合
一次只能添加一个数据
Map双列集合
一次添加一对数据
Collection
collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
遍历方式
迭代器遍历
增强for遍历
Lambda表达式遍历
List
List系列集合:添加的元素是有序、可重复、有索引
List
特点
有序:存和取的元素顺序一致
有索引:可以通过索引操作元素
可重复:存储的元素可以重复
List接口因为继承了Collection接口,所以具备Collection接口的所有方法,除此之外,List接口还额外实现了2种非常重要的方法:
get(int index):获取指定索引位置元素
set(int index, object obj):修改集合中指定索引位置处的元素为object;
五种遍历方式
子主题 1
子主题 2
子主题 3
子主题 4
子主题 5
数据结构
概念
List接口的实现类
ArrayList集合
优点
ArrayList类实现了可变数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问;
缺点
向指定的索引位置插入对象或者删除对象的速度较慢。
LinkedList集合
优点
LinkedList类采用链表结构保存对象。便于向集合中插入/删除对象,这种LinkedList类效率较高;
缺点
对于根据索引位置随机访问集合中的对象,LinkedList类实现List集合的效率较低;
Vector
Set系列集合
Set系列集合:添加的元素是无序、不重复、无索引
Set集合对象不按特定的方式排序,只是简单地将对象加入集合中,但是Set集合中不能有重复对象;Set集合由Set接口和实现Set接口的实现类组成。Set接口也继承了Collection类,所以实现Set接口的集合类也包含Collection相关的方法。
Set接口的实现类
HashSet
概念
HashSet类实现Set接口,由哈希表(实际上就是一个HashMap实例)支持,不保证Set集合的迭代顺序,此类允许使用null元素。
LinkedHashSet
TreeSet
概念
TreeSet不仅实现了Set接口,还实现了java.utl.SortedSet接口,因此TreeSet实现的Set集合在遍历时按照自然顺序递增排序,也可以按照指定比较器递增排序。
TreeSet类增加的方法
存入TreeSet类实现的Set集合必须实现Comparable接口,该接口中的CompareTo(Object o)方法比较此对象与指定对象的顺序,如果该对象小于,等于或大于指定对象,则分别返回负整数,0,正整数。
单列集合知识细节
Collection
Set
特点
无序、不重复、无索引
Set集合的方法上基本上与collection的API一致
实现类
Hashset:无序、不重复、无索引
子主题 1
子主题 2
LinkedHashset:有序、不重复、无索引
子主题 1
子主题 2
Treeset:可排序、不重复、无索引
子主题 1
子主题 2
子主题 3
List和Set两者都可以使用的通用遍历方式
迭代器遍历
迭代器在遍历集合的时候是不依赖索引的
迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式
细节注意点
1,报错NoSuchElementException 2,迭代器遍历完毕,指针不会复位 3,循环中只能用一次next方法
4,迭代器遍历时,不能用集合的方法进行增加或者删除
增强for遍历
增强for的底层就是迭代器,为了简化迭代器的代码书写的。
所有的单列集合和数组才能用增强for进行遍历
格式
细节
修改增强for中的变量,不会改变集合中原本的数据
Lambda表达式遍历
方法实现
添加元素
如果我们要往List系列集合中添加数据,那么方法永远返回true,因为List系列的是允许元素重复的
如果我们要往set系列集合中添加数据,如果当前要添加元素不存在,方法返回true,表示添加成功。如果当前要添加的元素已经存在,方法返回fa1se,表示添加失败。因为set系列的集合不允许重复。
Map
概念
Map集合提供的是key-value的映射关系,Map中不能包含相同的key,可以有相同的value,Map集合包含Map接口以及Map接口的所有实现类。
Map结合中允许值对象时null,而且允许多个。
常用方法
put(K key, V value)
向集合中添加指定的key-value的映射关系
get(Object key)
获取key的对象,如果存在指定的key对象,则返回该key对象的值,否则返回null
containsKey(Object key)
如果此集合包含指定key的映射关系,则返回true,否则返回false
containsValue(Object key)
如果此集合包含指定value的映射关系,则返回true,否则返回false
keySet()
返回此集合中所有key对象形成的Set集合
valueSet()
返回该集合中所有值对象形成的Collection集合
实现类
HashMap
HashMap类是基于hash表的Map接口实现,HashMap通过哈希码对其内部的映射关系进行快速查找,并允许使用null键和null值,但是必须保证键的唯一性。
优点
HashMap类实现的Map集合添加和删除映射关系效率更高;
缺点
此类不保证映射的顺序;
TreeMap
TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有顺序。
优点
集合中的映射关系具有顺序;
缺点
在添加、删除、定位映射关系时,效率较低,且不允许键为null;
继学习单列集合之后,开始学习双列集合,Map集合提供的是key-value的映射关系,所有的Map集合有如下的特点:键不能重复,值可以重复,每一个键只能找到自己对应的值。Map集合包含Map接口以及Map接口的所有实现类。Map结合中允许值对象时null,而且允许多个。

896

被折叠的 条评论
为什么被折叠?



