14
回答
今天面试问HashMap用来装大数据,没有HashTable合适
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

今天面试官问我,如果有大量的数据(>1000w),要保存到 HashMap,但是要避免 Key 的碰撞,有什么好的方法?

当时我不太了解具体的需求,我就只是回答了重写 hashCode 方法

面试完了以后我问面试官,他的答案是什么?

他说是用 HashTable 替换 HashMap,虽然性能差点,但是可以避免 Key 大量碰撞的问题

是这样的吗?


还有就是,他问我 InputStream 和 Reader 的区别?

我不太清楚他问的含义,我回答一个是字节流,一个是读取字节流的,不知道这样回答准确吗?

<无标签>
举报
AkataMoKa
发帖于2年前 14回/1K+阅
共有14个答案 最后回答: 2年前
java.io.Reader 和 java.io.InputStream 组成了Java 输入类。Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。


Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。
Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,

1. 有 1000w 的数据,我的话用缓存了,例如 Redis,Memcached,是不是用 HashMap 或者 HashTable 都是找抽型?

2. InputStream 是针对二进制读取,即针对字节,Reader 是针对字符读取(例如有的一个字符实际站占用的是 3 个字节,但是对 Reader 的接口来说,只是一个字符)

最他妈反感提了问题不给答案的面试官,装高深,其实这些玩意起先不懂都没关系,上网一查就懂了,面试的人怕的不是他了解得不够,而是不肯学
直接问你HashTable 和Hashmap 又啥区别就是了嘛  绕一大圈。。真够装的~~
--- 共有 1 条评论 ---
AkataMoKa那HashTable真的可以避免大量的Key碰撞吗? 2年前 回复
大量数据保存这个有没说是单线程环境下还是多线程环境下的呢?多线程环境下,HashTable确实是好的选择,因为其同步。单线程环境下的话,明显要选HashMap吧,并且单线程环境下会存在碰撞吗?这个我就没仔细研究过。

1 、HashMap对于大数据量的rehash等操作可能导致CPU过高,性能降低。HashTable散列算法比hashmap简单,但是线程安全。但是两个对大数据都没有什么优势。

2、字节和字符

面试官估计也是个半吊子。hashmap采用的是线性表加链表进行数据存储,虽然 hashcode可能会碰撞,但只要保证key的equals方法不误判就没有问题了。第二个问题reader是字符读取,它在底层持有一个Inputstream,通过缓存InputStream读取的字节数据并将字节进行编码以字符流的形式返回给你。

要求保存到 HashMap(不是Map?),面试官的答案却又是Hashtable。

--- 共有 3 条评论 ---
AkataMoKa嗯,是的 给我的感觉是,他挖了一个坑,想知道我是否知道能把它处理掉 2年前 回复
陈少鑫一语道破天机 2年前 回复
彩云小斯我也是这个感觉,就像面试官问,你上厕所是有左手还是用右用擦屁股,结果他的答案是用纸。。。 2年前 回复

数据里有相同的key,那么碰撞就是客观存在的。

避免碰撞就使用key可以重复的容器,

大数据量可以使用MongoDB等

顶部