集合总结(Collection,List,Set,Map)(补充集合结构图的关系)

在这里插入图片描述

集合体系结构图

在这里插入图片描述

Collection集合

概述

1.单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
2.JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现

常用方法

在这里插入图片描述

遍历(迭代器)及代码演示

在这里插入图片描述
在这里插入图片描述
代码演示:
在这里插入图片描述

List集合

概述(特点)

  • 有序集合
    允许出现重复的元素
    集合特点:①存储顺序一致 ②存储的元素可以重复 ③有索引

方法

在这里插入图片描述

概述

遍历(三种遍历方式——迭代器,普通for,增强for)

在这里插入图片描述

List子集的特点和功能

ArrayList集合——底层是数组结构实现,查询快、增删慢
LinkedList集合——底层是链表结构实现,查询慢、增删快

LinkedList集合的特有功能在这里插入图片描述

Set集合

1.特点

  • 元素存取无序
  • 没有索引,只能通过迭代器或者增强FOR来遍历
  • 不能存储重复元素

哈希值

  • 概念:JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

  • 获取方法:Object类中的public int hashCode():返回对象的哈希码值

  • 哈希值的特点

  • 1.同一个对象多次调用hashCode()方法返回的哈希值是相同

  • 2.默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

    代码演示:

    在这里插入图片描述
    哈希表:在这里插入图片描述

①HashSet

集合特点:

  • 1.底层是哈希表结构
  • 2.元素存储无序
  • 3.没有索引
  • 4.不能存储重复元素

HashSet集合保证元素唯一性源码分析图解**
在这里插入图片描述
HashSet学生遍历(重点:重写hashCode()和equals()方法,用增强FOR遍历)

在这里插入图片描述
在这里插入图片描述

②LinkedHashSet集合

特点

  • 哈希表和链表实现的Set接口,具有可预测的迭代次序

  • 存储有序

  • 没有重复元素

代码实现
在这里插入图片描述

③TreeSet集合

特点

  • 元素存储有序
  • 没有索引
  • 不能存储重复元素

1.自然排序Comparable(代码演示)
在这里插入图片描述
在这里插入图片描述

2.比较器排序Comparator的使用(代码演示)
在这里插入图片描述
在这里插入图片描述

Map集合

概述:

interface Map<K,V> K:键的类型;V:值的类型

代码演示:
在这里插入图片描述

特点:

  • 1.键值对映射关系
    2.一个键对应一个值
    3.键不能重复,值可以重复
    4.元素存取无序

常用方法

在这里插入图片描述

获取方法

在这里插入图片描述

遍历的两种方式:

①键去获取值(代码演示)
在这里插入图片描述
②键值去获取键和值(代码演示)
在这里插入图片描述

总结

在学习集合中,需要注意单列集合(Collection)和双列(Map)集合的区别(区分它们的遍历方式,分清它们的特点以及代码的具体运用

补充

在这里插入图片描述
如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口
1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
对比如下:
在这里插入图片描述

集合框架底层数据结构总结

Collection

1.List

  • Arraylist: Object数组
  • Vector: Object数组
  • LinkedList: 双向循环链表

2.Set

  • HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
  • LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap
    来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。
  • TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树

3.Map

  • HashMap:
    JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间

  • LinkedHashMap: LinkedHashMap 继承自
    HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap
    在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。详细可以查看:《LinkedHashMap 源码详细分析(JDK1.8)》

  • HashTable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的

  • TreeMap: 红黑树(自平衡的排序二叉树)
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_59619191/article/details/120362488