一、知识点
本节课的知识点为集合、泛型、Map。
二、目标
- 了解集合关系图。
- 掌握List和Set的区别。
- 掌握ArrayList和LinkedList的区别。
- 熟练使用集合相关API。
三、内容分析
- 重点
- 集合、泛型、Map。
- 难点
- 集合相关API的使用。
- 各个集合底层原理的区别。
四、内容
1、泛型
泛型的本质就是"参数化类型",将原来具体的类型参数化。
讯享网2、集合
用来存放多个对象的容器。
- 集合主要是两组(单列集合、双列集合)。
- Collection接口有两个重要的子接口 List Set,它们的实现子类都是单列集合。
- Map接口的实现子类是双列集合,存放的Key-Value(键值对)。
java.util.Collection下的接口和继承类关系简易结构图:

java.util.Map下的接口和继承类关系简易结构图:

2.1 List
存取有序的集合,并且有索引值,元素可以重复。
2.1.1 ArrayList
底层使用数组实现。不是线程安全的,查询速度快
讯享网
常用方法:查看jdk文档。
2.1.2 LinkedList
底层使用链表实现。
讯享网
常用方法:与ArrayList基本相似。
特点:添加、修改、删除的性能高,查询的性能不高
2.1.3 Vector
底层和ArrayList一样使用数组实现,线程安全的。缺点是效率比较低。
常用方法:与ArrayList基本相似。
2.1.4 区别
- ArrayList底层是用数组实现的,查询修改的效率比较快,增删的效率比较慢。
- LinkedList底层是通过双向链表实现的,增删的速度较快,查询修改的速度比较慢。
- Vector和ArrayList一样,都是通过数组实现的,但是Vector是线程安全的。
2.2 Set
存取无序的集合,元素不能重复。
保证元素唯一性需要让元素重写两个方法:一个是 hashCode(),另一个是 equals()。HashSet在存储元素的过程中首先会去调用元素的hashCode()值,看其哈希值与已经存入HashSet的元素的哈希值是否相同,如果不同 :就直接添加到集合;如果相同 :则继续调用元素的equals() 和哈希值相同的这些元素依次去比较。如果说有返回true的,那就重复不添加;如果说比较结果是false,那就是不重复就添加。
2.2.1 HashSet
无序,元素不能重复,允许存在一个null值。
常用方法:查看jdk文档。
2.2.2 LinkedHashSet
有序的set,元素不能重复,允许一个null存在。
常用方法:查看jdk文档。
2.2.3 TreeSet

自定义排序,元素不能重复,不允许null存在。
TreeSet使用二叉树进行排序,存储规则:
- 第一个元素作为根节点。
- 从第二个元素开始,每个元素从根节点开始比较。
- 比根节点大,就作为右子树;
- 比根节点小,就作为左子树;
- 与根节点相等,表示重复,不存储。
图解:

- 首先,将5作为根节点;
- 插入10,由于10大于5,作为5的右子树;
- 插入13,由于13大于5,进入右子树,13又大于10,作为10的右子树;
- 插入3,由于3小于5,作为5的左子树;
- 插入2,由于2小于5,进入左子树,2又小于3,作为3的左子树;
- 插入4,由于4小于5,进入左子树,4大于3,作为3的右子树;
- 插入18,由于18大于5,进入右子树,18又大于10,进入10的右子树,18又大于13,作为13的右子树;
- 插入11,由于11大于5,进入右子树,11又大于10,进入10的右子树,11小于13,作为13的左子树;
- 插入9,由于9大于5,进入右子树,9小于10,作为10的左子树。
- 最后,进行中序遍历(左根右:首先遍历左子树,然后访问根结点,最后遍历右子树),得到结果【2,3,4,5,9,10,11,13,18】。
接下来介绍TreeSet具体如何实现:
让元素所在的类实现Comparable接口,并重写CompareTo() 方法,并根据CompareTo()的返回值来进行添加java基础7.2.4元素。
根据compareTo返回值决定:
- 返回1,认为新插入的元素比上一个元素大,于是二叉树存储时,会存在根的右侧。
- 返回-1,认为新插入的元素比上一个元素小,于是二叉树存储时,会存在根的左侧。
- 返回0,表示重复,不存储。
接下来通过案例分析TreeSet实现自定义排序的过程:
假设有学生类(姓名name,年龄age),现在有若干个学生对象,现在要按照年龄排序,放到容器中,我们就可以选择使用TreeSet解决。
2.3 Map(字典)
Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value。key和value都可以是任何引用类型的数据。
Map的存储结构:

2.3.1 HashMap
- 无序,存储元素和取出元素的顺序有可能不一致;
- key不能重复,key允许是null;允许多个 null值和一个null键(key重复值会被覆盖)
- 不是线程安全的。
2.3.2 TreeMap
- 可以按照key来做排序,默认按照 key 进行升序排序,
- key不能重复,key不允许为null;
- 不是线程安全的。
2.3.3 Hashtable
- 无序;
- 不允许有任何的null键和null值;
- 是线程安全的。
2.3.4 LinkedHashMap
- 有序的;
- key不能重复,key允许是null;允许一个null键和多个null值
- 不是线程安全的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/9275.html