📣 独立日限时特惠: VIP通行证立减$68
楼主: yawnzh
跳转到指定楼层
上一主题 下一主题
收起左侧

Wepay OA

🔗
 楼主| yawnzh 2015-9-15 05:14:56 | 只看该作者
全局:
magicalcan 发表于 2015-9-13 22:28
lz能不能私信我code,我刚做了OA,md最后一个case总是过不了,不知道为什么,最后时间到了,我想看看哪有问 ...

你的hash function怎么写的啊,我猜测是hash function有问题吧,我室友也是这个问题,我看他代码结果发现他的hash function是在key是字符串的时候用字符串的长度%size, 然后导致长度相同的key都放在一个bucket里了,然后LTE了, 正确地做法是hash(key)%size.
回复

使用道具 举报

🔗
magicalcan 2015-9-15 06:22:30 | 只看该作者
全局:
yawnzh 发表于 2015-9-15 05:14
你的hash function怎么写的啊,我猜测是hash function有问题吧,我室友也是这个问题,我看他代码结果发现 ...

我是有一个Entry<K, V>类。
然后index = key.hashCode()%size;
key 就是put或者get的参数 key,size就是初始constructor设定的一个数;
然后用index取arraylist<LinkedList<Entry>>里的某一个linkedlist。然后for(Entry e: linkedlist)找有没有e.key.equals(key)的
回复

使用道具 举报

🔗
xytan123 2015-9-15 09:11:08 | 只看该作者
全局:
yawnzh 发表于 2015-9-15 05:14
你的hash function怎么写的啊,我猜测是hash function有问题吧,我室友也是这个问题,我看他代码结果发现 ...

linkedlist 需要自己写么,还是直接用list
回复

使用道具 举报

🔗
magicalcan 2015-9-15 11:35:12 | 只看该作者
全局:
xytan123 发表于 2015-9-15 09:11
linkedlist 需要自己写么,还是直接用list

不用自己写
回复

使用道具 举报

🔗
niubi 2015-10-4 06:15:39 | 只看该作者
全局:
我也是第二个test case一直没过,估计挂了。

同样index = key.hashCode()%size; 还有什么地方可能出问题吗?
回复

使用道具 举报

🔗
何打发123 2015-11-13 11:48:37 | 只看该作者
全局:
niubi 发表于 2015-10-4 06:15
我也是第二个test case一直没过,估计挂了。

同样index = key.hashCode()%size; 还有什么地方可能出问题 ...

index = key.hashCode()%size这样写不对吗?
回复

使用道具 举报

🔗
raccoon 2016-2-15 09:26:11 | 只看该作者
全局:
  1. public class MyHashMap<K, V> {
  2.    
  3.     class Entry<K, V> {
  4.         K key;
  5.         V value;
  6.         Entry (K key, V value) {
  7.             this.key = key;
  8.             this.value = value;
  9.         }
  10.     }

  11.     private int capacity = 16;
  12.     private List<LinkedList<Entry<K, V>>> buckets;

  13.     public MyHashMap() {
  14.         buckets = new ArrayList<>();
  15.         for (int i = 0; i < capacity; ++i) {
  16.             buckets.add(i, null);
  17.         }
  18.     }

  19.     public void put (K key, V value) {
  20.         if (key == null) {
  21.             throw new NullPointerException("Key cannot be null!");
  22.         }
  23.         int index = key.hashCode() % capacity;
  24.         if (buckets.get(index) == null) {
  25.             buckets.set(index, new LinkedList<Entry<K, V>>());
  26.         }
  27.         LinkedList<Entry<K, V>> bucket = buckets.get(index);
  28.         Iterator<Entry<K, V>> iterator = bucket.iterator();
  29.         while (iterator.hasNext()) {
  30.             Entry<K, V> entry = iterator.next();
  31.             //key already exists, value is updated
  32.             if (entry.key.equals(key)) {
  33.                 entry.value = value;
  34.                 return;
  35.             }
  36.         }

  37.         //key doesn't exist yet
  38.         bucket.add(new Entry<>(key, value));

  39.     }

  40.     public V get (K key) {
  41.         if (key == null) {
  42.             throw new NullPointerException("key cannot be null!");
  43.         }

  44.         int index = key.hashCode() % capacity;
  45.         if (buckets.get(index) == null) {
  46.             return null;
  47.         }
  48.         LinkedList<Entry<K, V>> bucket = buckets.get(index);
  49.         Iterator<Entry<K, V>> iterator = bucket.iterator();
  50.         while (iterator.hasNext()) {
  51.             Entry<K, V> entry = iterator.next();
  52.             if (entry.key.equals(key)) {
  53.                 return entry.value;
  54.             }
  55.         }
  56.         return null;
  57.     }
  58. }
复制代码

评分

参与人数 2大米 +6 收起 理由
snowcat1 + 3 给你点个赞!
mqcherry + 3 感谢分享!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表