m0_37402140
学习中呢
2017-08-28 02:10
采纳率: 0%
浏览 701

hashmap的一些问题解析

相信大家都看过一些集合的源码,不对,肯定看过。我也浅读了一些源码下面两个问题不太理解 hashmap的父类已经实现了map接口,为什么hashmap还要实现map接口,还有hashmap的hash方法里面的算法我自己觉得hashcode得值生成是有一定规律的,而在存储时容易发生碰撞,hash方法主要是打乱顺序,减少碰撞,毕竟这只是我的猜测,需要各位大佬的讲解

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • li_ling_ren
    请叫我站长 2017-08-28 02:33

    父类实现的接口子类可以不去再进行实现,而你看到的这种情况java里应该是不止一次的出现,
    比如ArrayList,HashSet 等都出现了同样的问题。或许是为了方便查看实现类实现的接口,使文档更多的可读性,
    也有可能就是作者的手误,这个你不比太过纠结。
    对于还有hashmap的hash方法里面的算法hashcode得值生成是有一定规律的,这个是肯定有规律的,同一个对象,每次生成的hashcode必定一样。
    所以,一般你要重写一个类的hashcode方法是时,一定要重写equals方法。

    点赞 评论
  • liugstick
    棍子哥 2017-08-28 06:59

    java面向对象就是这样的实现的,举个简单例子,list和set都基于Collections,你可以发现set继承了所有的功能,为啥还要有个set呢,便于和list进行区分

    点赞 评论
  • tianbiandetianbian
    AlanJiang_NLP 2017-08-28 09:14

    stackoverflow上有人说:HashMap的这种继承实现关系其实在现在看来是一个失误,这个是java集合框架的编写者Josh Bloch自己承认的,不知道真假。至于hash()方法是为了防止hashCode()算出的一些比较容易产生冲突的情况,最终目的肯定是尽量避免冲突的发生,具体理解可见:
    https://www.zhihu.com/question/20733617。

    点赞 评论

相关推荐