【set学习】

1.Set集合

        (1)Set集合的特点

                无序,唯一

        (2)HashSet集合

                A:底层数据结构是哈希表(是一个元素为链表的数组)

                B:哈希表底层依赖两个方法:hashCode()和equals()

          执行顺序:

                首先比较哈希值是否相同

                        相同:继续执行equals()方法

                                        返回true:元素重复了,不添加

                                        返回false:直接把元素添加到集合

                        不同:就直接把元素添加到集合

                C:如何保证元素唯一性的呢?

                        由hashCode()和equals()保证的

                D:开发的时候,代码非常的简单,自动生成即可。

                 存储字符串

                        步骤:比较哈希值 相同 比较地址值或走equals()

                                                      不同 直接添加到集合中

                        按照方法的步骤来说:

                                先看hashCode()值是否相同

                                                相同:走equals()方法

                                                        返回true:说明元素重复,不添加

                                                        返回false:说明元素不重复,添加

                                                不同:就直接把元素添加到集合

                                String类重写hashCode()和equals()方法

                E:哈希值和哪些内容相关

                        和对象的成员变量值相关

        (3)TreeSet集合(特点:排序和唯一)

                A:底层数据结构是红黑树(是一个自平衡的二叉树)

                B:保证元素的排序方式

                        a:自然排序(元素具备比较性)

                                让元素所属的类实现Comparable接口

                        b:比较器排序(集合具备比较性)

                                让集合构造方法接收Comparator的实现类对象

                        c:元素是如何存储进去的?

                                第一个元素存储的时候,直接作为根节点存储

                                从第二个元素开始,每个元素从根节点开始比较

                                        大:放右边

                                        小:放左边

                                        相等:不管

                        d:元素是如何取出来的?(前序遍历,中序遍历,后序遍历)

                                从根节点开始,按照左,中,右的原则依次取出元素

2.Collection集合总结

        Collection

        |--List 有序,可重复

                |--ArrayList

                        底层数据结构是数组,查询快,增删慢。

                        线程不安全,效率高

                |--Vector

                        底层数据结构是数组,查询快,增删慢。

                        线程安全,效率低

                |--LinkedList

                        底层数据结构是链表,查询慢,增删快。

                        线程不安全,效率高

                |--Set 无序,唯一

                        |--HashSet

                                底层数据结构是哈希表。

                                如何保证元素唯一性的呢?

                                        依赖两个方法:hashCode()和equals()

                                        开发中自动生成这两个方法即可

                       |--LinkedHashSet(有序唯一)

                                底层数据结构是链表和哈希表

                                由链表保证元素有序(存储和取出是一致的)

                                由哈希表保证元素唯一

                        |--TreeSet

                                底层数据结构是红黑树。

                                如何保证元素排序的呢?

                                        自然排序

                                        比较器排序

                                        如何保证元素唯一性的呢?

                                                根据比较的返回值是否是0来决定

3.针对Collection集合我们到底使用谁呢?(掌握)

        唯一吗?

                是:Set

                否:List

        排序吗?

                是:TreeSet

                否:HashSet

如果你知道是Set,但是不知道是哪个Set,就用HashSet。

 

        要安全吗?

                是:Vector

                否:ArrayList或者LinkedList

        查询多:ArrayList

        增删多:LinkedList

        如果你知道是List,但是不知道是哪个List,就用ArrayList。

        如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

        如果你知道用集合,就用ArrayList。

4.在集合中常见的数据结构

        ArrayXxx:底层数据结构是数组,查询快,增删慢

        LinkedXxx:底层数据结构是链表,查询慢,增删快

        HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()

        TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值