实训17 2018.04.17

本文详细介绍了Java集合框架中List和Set的区别与特点,包括它们的数据结构、存储方式及遍历方法,并深入探讨了HashSet的工作原理及其hashcode()方法的实现。

Collection及其部分子类:

  List的特点:有索引,有序(按照存入顺序进行输出),可出现重复元素;

  Set的特点:没有索引,没有重复元素,不一定有序(HashSet的存储是无序的,LinkedHashSet的存储是有序的)。

  List有三种遍历方式:

    for(int ),foreach,Iterator;

  而Set没有第一种,因为它没有索引。

   

Set:

  对于Set作些说明:

    Set的实现类HashSet使用到hashcode()方法。

    hashcode()方法:

      Object中的hashcode()方法:

    

        用native修饰,没有给出实现的具体代码。

      String中的hashcode()方法:

        

        在代码中,hash的初始值为0,value是传入的字符串的字符数组(private final char value[])表示,例如"abc"存入value[]中,那么value[0]='a',value[1]='b',value[2]='c'。经过判断之后,令val[]=value[],进行循环:h=31*0+97=97,(其中,97是'a'的ASCII值);h=31*97+98=3105,(其中,98是'b'的ASCII值);h=31*3105+99=96354。这就是“abc”的hashcode()得到的值。

      

 

      结果如下:

      

      HashSet使用数组加链表的存储结果。当使用HashSet存储时,初始设置数组长度为16。对第一个元素“a”进行添加时,计算“a”的hashcode()值为97,97mod16=1。数组的第一个位置下面链接的链表中没有“a”这个值,所以把这个值链接在第1个元素下面。

      

 

      

      

 

转载于:https://www.cnblogs.com/goxxiv/p/8867236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值