黑马程序员技术交流社区

标题: 哈希表的提问 [打印本页]

作者: 也许依然    时间: 2014-3-7 11:22
标题: 哈希表的提问
哈希表的原理是什么,是用什么方式取出元素的?
作者: 三眼皮    时间: 2014-3-7 11:36
先用哈希函数得出引用对象的哈希值作为该对象所在数据存储的地址。然后将该数据存到该地址。如果该地址已经存有数据,则用特定的冲突解决方法再计算出新的哈希值。所以它的输出是按哈希地址输出的,跟你输入的顺序呢不一定一致。取元素查找时,输入要查询数据的值,然后程序会计算出该数据的哈希值,然后直接调出王七哈希值所在地址的数据。
作者: 三眼皮    时间: 2014-3-7 11:38
这个事毕老师讲的,你可以参考下:

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());
                }
        }
}

作者: 混蛋哥    时间: 2014-3-7 11:40
哈希表其实你就当他是个字典
比如 姓名:张三;年龄: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());
                }
        }


作者: 何清林    时间: 2014-3-7 17:49
本帖最后由 何清林 于 2014-3-7 17:57 编辑

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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2