java基础7.2.4

java基础7.2.4一 知识点 本节课的知识点为集合 泛型 Map 二 目标 了解集合关系图 掌握 List 和 Set 的区别 掌握 ArrayList 和 LinkedList 的区别 熟练使用集合相关 API 三 内容分析 重点 集合 泛型 Map 难点 集合相关 API 的使用 各个集合底层原理的区别 四 内容 1 泛型 泛型的本质就是 参数化类型 将原来具体的类型参数化 2

大家好,我是讯享网,很高兴认识大家。



一、知识点

本节课的知识点为集合、泛型、Map。

二、目标

  1. 了解集合关系图。
  2. 掌握List和Set的区别。
  3. 掌握ArrayList和LinkedList的区别。
  4. 熟练使用集合相关API。

三、内容分析

  1. 重点
    • 集合、泛型、Map。
  2. 难点
    • 集合相关API的使用。
    • 各个集合底层原理的区别。

四、内容

1、泛型

泛型的本质就是"参数化类型",将原来具体的类型参数化。

 
讯享网 

2、集合

用来存放多个对象的容器。

  1. 集合主要是两组(单列集合、双列集合)。
  2. Collection接口有两个重要的子接口 List Set,它们的实现子类都是单列集合。
  3. Map接口的实现子类是双列集合,存放的Key-Value(键值对)。

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

a627e0a93a8b4366b0c458277a9ccfa1.png

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

90df068a644a41d780fff8f3b57d4083.png

2.1 List

存取有序的集合,并且有索引值,元素可以重复。

2.1.1 ArrayList

底层使用数组实现。不是线程安全的,查询速度快

讯享网
 

常用方法:查看jdk文档。

返回值类型方法和描述 将指定的元素追加到此列表的末尾。 在此列表中的指定位置插入指定的元素。 按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。 将指定集合中的所有元素插入到此列表中,从指定的位置开始。 从列表中删除所有元素。 如果此列表包含指定的元素,则返回 。 返回此列表中指定位置的元素。 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 如果此列表不包含元素,则返回 。 以正确的顺序返回该列表中的元素的迭代器。 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 删除该列表中指定位置的元素。 从列表中删除指定元素的第一个出现(如果存在)。 从此列表中删除指定集合中包含的所有元素。 用指定的元素替换此列表中指定位置的元素。 返回此列表中的元素数。 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。

2.1.2 LinkedList

底层使用链表实现。

讯享网

常用方法:与ArrayList基本相似。

特点:添加、修改、删除的性能高,查询的性能不高

2.1.3 Vector

底层和ArrayList一样使用数组实现,线程安全的。缺点是效率比较低。

 

常用方法:与ArrayList基本相似。

2.1.4 区别

  1. ArrayList底层是用数组实现的,查询修改的效率比较快,增删的效率比较慢。
  2. LinkedList底层是通过双向链表实现的,增删的速度较快,查询修改的速度比较慢。
  3. 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使用二叉树进行排序,存储规则:

  1. 第一个元素作为根节点。
  2. 从第二个元素开始,每个元素从根节点开始比较。
  • 比根节点大,就作为右子树;
  • 比根节点小,就作为左子树;
  • 与根节点相等,表示重复,不存储。

图解:

3421587c0a504cf9834ee98917607ba5.png

  1. 首先,将5作为根节点;
  2. 插入10,由于10大于5,作为5的右子树;
  3. 插入13,由于13大于5,进入右子树,13又大于10,作为10的右子树;
  4. 插入3,由于3小于5,作为5的左子树;
  5. 插入2,由于2小于5,进入左子树,2又小于3,作为3的左子树;
  6. 插入4,由于4小于5,进入左子树,4大于3,作为3的右子树;
  7. 插入18,由于18大于5,进入右子树,18又大于10,进入10的右子树,18又大于13,作为13的右子树;
  8. 插入11,由于11大于5,进入右子树,11又大于10,进入10的右子树,11小于13,作为13的左子树;
  9. 插入9,由于9大于5,进入右子树,9小于10,作为10的左子树。
  10. 最后,进行中序遍历(左根右:首先遍历左子树,然后访问根结点,最后遍历右子树),得到结果【2,3,4,5,9,10,11,13,18】。

接下来介绍TreeSet具体如何实现:

让元素所在的类实现Comparable接口,并重写CompareTo() 方法,并根据CompareTo()的返回值来进行添加java基础7.2.4元素。

根据compareTo返回值决定:

  1. 返回1,认为新插入的元素比上一个元素大,于是二叉树存储时,会存在根的右侧。
  2. 返回-1,认为新插入的元素比上一个元素小,于是二叉树存储时,会存在根的左侧。
  3. 返回0,表示重复,不存储。
 

接下来通过案例分析TreeSet实现自定义排序的过程:

假设有学生类(姓名name,年龄age),现在有若干个学生对象,现在要按照年龄排序,放到容器中,我们就可以选择使用TreeSet解决。

 
 

2.3 Map(字典)

Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value。key和value都可以是任何引用类型的数据。

Map的存储结构:

6e9654cb6b304878b699ad8701d7648b.png

2.3.1 HashMap

  1. 无序,存储元素和取出元素的顺序有可能不一致;
  2. key不能重复,key允许是null;允许多个 null值和一个null键(key重复值会被覆盖)
  3. 不是线程安全的。
 

2.3.2 TreeMap

  1. 可以按照key来做排序,默认按照 key 进行升序排序,
  2. key不能重复,key不允许为null;
  3. 不是线程安全的。
 
 

2.3.3 Hashtable

  1. 无序;
  2. 不允许有任何的null键和null值;
  3. 是线程安全的。
 

2.3.4 LinkedHashMap

  1. 有序的;
  2. key不能重复,key允许是null;允许一个null键和多个null值
  3. 不是线程安全的。
 

小讯
上一篇 2025-01-01 17:36
下一篇 2024-12-24 14:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/9275.html