哈哈哈123457 2017-03-03 08:14 采纳率: 88.1%
浏览 1551
已采纳

java 集合 hashset的add问题 望大神解惑

hashset add的方法 value设置为PRESENT有什么用么,是不是添加一个对象就给这个
对象设置一个一模一样的PRESENT啊,这样都一样了,有什么意义么
还有 为什么hashset查询速度会快 他是如何查询对象的

  • 写回答

4条回答 默认 最新

  • little_how 2017-03-03 08:30
    关注

    1.首先hashset的底层实现是hashmap,hashset就是hashmap的keyset;
    2.hashmap需要的是key和value,hashset的add只是有一个key,而value没有,所以需要用一个占用空间小的不变的PRESENT来;

    为什么hashset读取快,因为hashmap内部有一个hash算法;
    hashmap维护的是一个数组;
    hash算法是根据你的hashCode来计算,最简单的就是取模;
    这样就能找到具体的下标,也就是数组的下标,因为hashmap引入了红黑树,所以hash冲突损耗的效率就可以大大减少;

    举个简单的例子;
    你的hashmap里面初始化的数组大小为16;
    如果我存10个数字;
    如:14 22 9 7 5 3 1 8 9 19
    如果有取模(求余)的话对应下标就是
    14 6 9 7 5 3 1 8 9 3;
    那么查询的时候可以直接根据下标取值;
    其中3和19放置的位置一致,判定是否为当前值就需要用equals方法咯;

    java中实现的是用的&算法,更快;

    希望可以帮到你....

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 #求带 python,使用pycharm爬取智联招聘数据资源并保存为Excel文件,同时以图表形式呈现
  • ¥15 学校优化算法怎么样,国内用的多吗?
  • ¥15 微信购物商城购物车的所有功能以及购物车,和首页的搜索功能
  • ¥40 servlet的web程序部署出错
  • ¥50 activiti 新建流程系列问题
  • ¥50 为什么我版本升级之后运行速度变慢5倍??
  • ¥15 如何在gazebo中加载机械臂和机械手
  • ¥15 纯运放实现隔离采样方案设计
  • ¥20 easyconnect无法连接后缀带.com的网站,一直显示找不到服务器ip地址,但是带有数字的网站又是可以连接上的,如何解决
  • ¥15 电脑开机过商标后就直接这样,求解各位