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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒙武辉 黑马帝   /  2012-2-16 02:36  /  1846 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

HashSet底层数据结构是哈希表,但是我不知道什么是哈希表?HashSet怎么情况下使用?如何用?可以举个例子说明一下吗?

3 个回复

倒序浏览
        public static void main(String[] args)
        {
                Set<String> set = new HashSet<String>();
               
                String str1 = "hello";
                String str2 = "world";
                String str3 = "welcome";
                String str4 = "tom";
                String str5 = "akon";
                String str6 = "tom";
               
               
                set.add(str1);
                set.add(str2);
                set.add(str3);
                set.add(str4);
                set.add(str5);
                set.add(str6);
                set.add(str1);
               
                System.out.println(set);
        }

一般都会使用TreeSet也是首选,TreeSet是可以排序的集合。
HashSet不能排序,HashSet底层是使用HashMap实现的。当使用add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value则都是同一个Object对象(该对象我们用不上)

当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。

常规都会选择排序的集合,方便管理。
回复 使用道具 举报
我调出的我日记来解答一下吧

其实set对应的数学结构就是集合,所以集合没有相同的元素,
所以传入的自定义类的元素,必须先重写equals()方法,
用于判断是否相同再传入,其底层结构是hash表,什么是哈希表呢?
在数据结构中,为了优化查找效率,就制造了散列技术,就是哈希表,
利用哈希函数(对应hashcode方法返回值)对元素进行运算,得出值映射到哈希表中,
而且为了解决冲突(值相同)所以利用开发地址和拉链法解决冲突,
从而实现在理想的状态下查询期望时间为O(1);
所以在HashSet中的元素是没有顺序,不重复的。

有关散列技术详细可以查询数据结构书籍

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
哈希表哈希算法之类的要说清楚本菜也不知道,只知道大概。lz可以百度
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马