黑马程序员----集合框架中的ArrayList和HashSet

         ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

         ArrayList

         ArrayList:是List的子类,也是数组结构。

       特点:1.长度可变;2.线程不同步;3.是作为替代了Vector出现的;4.看到是List集合形式,就知道可以有重复元素,并且可以实现增删改查四个功能。

       通过代码的演示来了解ArrayList

 

       HashSet

         HashSet:是Set集合的子类,哈希表结构。

       特点:1.不允许存储重复元素,因为会发生查找的不确定性;2.不保证存入和取出顺序一致;3.查询效率非常高。

        HashSet集合取出元素的方法只有一个:迭代器。

      用简单的一段代码来展现一下HashSet

 

       分别介绍完ArrayListHashSet之后,再看一下他们的区别:

        ArrayList1.有序,存入数据和取出数据一致;2.有索引,所以保证有序;3.允许重复元素;

        HashSet1.不保证顺序;2.不允许重复元素。

       在学习HashSet时,存储元素时接触到了hash表和hash算法以及hashCode()。对于这这三个知识点进行一下说明。

         1.hash算法:因为HashSet中不允许重复元素,所以在存储时就会算出每个元素固定的位置或叫做角标。那么算的方法就叫做hash算法:

                      methodelement){

                            index = ascii % 10

                       return index

                }

          2.Hash表:用于存储元素和哈希值对应关系的容器称之为哈希表。

          3.hashCode()hash算法功能本身在堆底层就是哈希表结构,计算对象在该结构存放的地址。这个方法就叫做hashCode()

        在运用hashSet时,会遇到一个问题,哈希冲突。首先解释一下,何为哈希冲突:

        当哈希算法算出两个元素的值相同时,这样的情况就叫做哈希冲突。

        那么遇到这种问题,如何解决呢?冲突后,对元素进行进一步的判断。判断元素的内容:

        哈希表在判断元素是否相同,一句hashCode()方法,如果哈希冲突(哈希值相同),再判断元素的equals方法。如果equals返回true,表示来两个元素相同,不进行存储;返回false,表示两个元素不同,进行存储。

        以上列的Student对象为实例,用代码来体现具体的实现步骤:

 

         HashSet就是通过hashCode()equals两种方法来保证结构唯一性:

         HashCode是为了根据元素自身的特点确定哈希值;equals方法是为了解决哈希值的冲突。这样以来就完全是实现元素唯一性。

       在此还要强调一下hashCode方法一个重要的作用:

    当一个对象被存储进hashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了。否则,对象修改后的哈希值与最初存储进hashSet集合中的哈希值不同。这种情况下,即便在contains方法使用该对象的当前引用作为参数去hashSet集合中检索对象,也将返回找不到对象的结果,导致无法从HashSet集合中单独删除当前对象,从而造成内存泄漏。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值