arrayList hashset的比较及hashcode分析

这段时间学习了一些java基础的知识,其中一些是我之前不知道的,记录下来希望自己好好体会。

集合按照引用的对象将其放进去的,按照顺序将其放进去,指的是位置的顺序。 ArrayList好理解,下面就重点谈谈对hashset的理解。

但是hashset不是,先判断是不是 有这个对象,如果存在,那么就不放了。

先看一个例子:



这种情况下输出一下集合中元素个数是2。

那么如果把自定义的hashcode方法去掉, 使用默认的hashcode方法结果是3。

问题:hashcode的作用是什么呢?


当面对大量数据进行查询时,如何快速找到要查询的数据呢?hash算法其实就是提供了一个类似分组的功能,然后在每个小组内进行查找。这样便提高了查询效率,其中hashcode就是对数据进行分组的依据。

所以这里有两个约定:

1、如果两个对象equals方法相等,那么hashcode方法也相等。

2、对于那些参与生成hashcode的对象遍历,如果存储到hashset中之后就不要再改变这些变量的值了,否则容易引起内存泄漏。


上面这个代码就报错了,因为在hashset中找不到跟pt1相等的变量。所以说在java中是存在内容泄漏的。

学习总结:

1、很多时候因为我们知识不足很难更深入得了解一个知识,这时候我们就需要善于站在巨人肩膀上进行学习。

2、对于未来,只有善于学习的人才能立于不败之地。学习能力是很重要的核心竞争力。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值