这段时间学习了一些java基础的知识,其中一些是我之前不知道的,记录下来希望自己好好体会。
集合按照引用的对象将其放进去的,按照顺序将其放进去,指的是位置的顺序。 ArrayList好理解,下面就重点谈谈对hashset的理解。
但是hashset不是,先判断是不是 有这个对象,如果存在,那么就不放了。
先看一个例子:
这种情况下输出一下集合中元素个数是2。
那么如果把自定义的hashcode方法去掉, 使用默认的hashcode方法结果是3。
问题:hashcode的作用是什么呢?
当面对大量数据进行查询时,如何快速找到要查询的数据呢?hash算法其实就是提供了一个类似分组的功能,然后在每个小组内进行查找。这样便提高了查询效率,其中hashcode就是对数据进行分组的依据。
所以这里有两个约定:
1、如果两个对象equals方法相等,那么hashcode方法也相等。
2、对于那些参与生成hashcode的对象遍历,如果存储到hashset中之后就不要再改变这些变量的值了,否则容易引起内存泄漏。
上面这个代码就报错了,因为在hashset中找不到跟pt1相等的变量。所以说在java中是存在内容泄漏的。
学习总结:
1、很多时候因为我们知识不足很难更深入得了解一个知识,这时候我们就需要善于站在巨人肩膀上进行学习。
2、对于未来,只有善于学习的人才能立于不败之地。学习能力是很重要的核心竞争力。