A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 强强_U00ts 中级黑马   /  2015-7-21 21:49  /  236 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器。
        |--HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
                HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的。
                当元素的hashCode值相同时,才继续判断元素的equals是否为true。
                如果为true,那么视为相同元素,不存。如果为false,那么存储。
                如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。
      |--LinkedHashSet:有序,hashset的子类。
        |--TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。

哈希表的原理:
1,对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值 称为哈希值。
2,哈希值就是这个元素的位置。
3,如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就存储,在原来对象的哈希值基础 +1顺延。
4,存储哈希值的结构,我们称为哈希表。
5,既然哈希表是根据哈希值存储的,为了提高效率,最好保证对象的关键字是唯一的。
        这样可以尽量少的判断关键字对应的对象是否相同,提高了哈希表的操作效率。

对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。
对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。

1 个回复

倒序浏览
很详细啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马