Object类九大方法之HashCode方法
提到hashcode方法就避免不了equals方法
无论何时这个equals方法被重写那么都是有必要去重写hashCode方法,这个是为了维持hashCode的一种特定,相同的对象必须要有相同的hashCode值
hashCode方法解释
1.再同一次的java程序应用过程中,对应同样的对象多次调用hashCode方法,hashCode方法必须一致性的返回同样的一个 地址值,前提是这个对象不能改变.
2.两个对象相同是依据equals方法的,那么其中的每一个对象调用hashCode方法都必须返回相同一个integer值,也就是对象的地址,equals方法相等,那么hashCode方法也必须相等.
3.如果两个对象依据equals方法返回的结果不相等,那么对其中的每一个对象调用hashCode方法返回的结果也不是一定必须得相等(也就是说,equals方法的结果为false,那么hashCode方法返回的结果可以相同也可以不相同)但是对于我们来说针对两个对象的不相等,如果生层相同的hashCode则可以提高应用程序的性能.
例题:
已知二叉树后序遍历序列是dabec,中序遍历序列是debac,那么问题是他的前序遍历顺序是 (D)
A:acbed
B:decab
C:deabc
D:cedba
推导如下:
1、从后序可知树根为C,因为最后的节点是树根。
2、从中序的规则可知树根在中间,树根的左边是左孩子,右边是右孩子。很明显树根C是没有右孩子,只有左孩子DEBA。
中序遍历:DEBA
后序遍历:DABE
推出E是左子树的根结点,并且存在左子树D,右子树BA,因为从中序遍历可知E的左边是D,右边是BA
中序遍历:BA
后序遍历:AB
推出B是右子树的根结点,并且存在右子树,但没有左子树,因为从中序遍历可知B只有右子树,没有左子树。
还原二叉树如下图:
前序为:CEDBA
推导的方法只需记住下面的规则即可,然后逐步分割法,就像我上面那样推导。拿到左右子树反复套用下面的遍历规则,很快就可以还原一棵完整的树。
1.先序遍历:根、左、右
2.中序遍历:左、根、右
c_ngpagmjz&rsv_dl=gh_pc_zhidao):根、左、右
2.中序遍历:左、根、右
3.后序遍历: 左、右、根