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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 也许依然 中级黑马   /  2014-3-7 11:22  /  929 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

哈希表的原理是什么,是用什么方式取出元素的?

5 个回复

倒序浏览
先用哈希函数得出引用对象的哈希值作为该对象所在数据存储的地址。然后将该数据存到该地址。如果该地址已经存有数据,则用特定的冲突解决方法再计算出新的哈希值。所以它的输出是按哈希地址输出的,跟你输入的顺序呢不一定一致。取元素查找时,输入要查询数据的值,然后程序会计算出该数据的哈希值,然后直接调出王七哈希值所在地址的数据。
回复 使用道具 举报
这个事毕老师讲的,你可以参考下:

import java.util.*;
/*
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
        |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
                        HashSet是如何保证元素唯一性的呢?
                        是通过元素的两个方法,hashCode和equals来完成。
                        如果元素的HashCode值相同,才会判断equals是否为true。
                        如果元素的hashcode值不同,不会调用equals。

                        注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。


        |--TreeSet:

Set集合的功能和Collection是一致的。




*/


class HashSetDemo
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
               
                HashSet hs = new HashSet();

                sop(hs.add("java01"));
                sop(hs.add("java01"));
                hs.add("java02");
                hs.add("java03");
                hs.add("java03");
                hs.add("java04");

                Iterator it = hs.iterator();

                while(it.hasNext())
                {
                        sop(it.next());
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
哈希表其实你就当他是个字典
比如 姓名:张三;年龄:25
以姓名为key,以张三为value;通过迭代器去遍历存储的数组然后get key获取value

        public static void main(String[] args) {

                //定义一个ArrayList对象
                List<String> list = new ArrayList<String>();
               
                //添加5个元素
                for(int i=1;i<=5;i++){
                        list.add("Test"+i);
                }
                //使用Iterator遍历输出
                Iterator<String> it = list.iterator();
                while(it.hasNext()){
                        System.out.println(it.next());
                }
        }

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 何清林 于 2014-3-7 17:57 编辑

哈希表是按照哈希值来存储的            不是同一对象,但是地址值是一样的,这个时候他会在该地址值下顺延。              保证元素唯一性的原理:判断元素的hashCode值是否相同             如果相同,还会继续判断元素的equals方法,是否为true;添加失败就为假。              HashSet是如何保证元素唯一性的呢?                是通过元素的两个方法,hashCode和equals来完成。                如果元素的HashCode值相同,才会判断euqals是否为true,如果元素的hashscode值不同,不会调用equals.(建立一个比较有针对性的hashcode会比较高效一些)另外,用迭代器取出

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1 复制之后至少整理一下!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马