Java学习杂谈(三)[Java编程]
本文“Java学习杂谈(三)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
这已经笔者写的第三篇Java杂记了,庆幸前两篇一向得到论坛朋友们的支持鼓舞,还望大家持续指正不足之处.笔者也一向巴望通过这样方法复苏的自审,来探求自己技术上的不足之处,但愿和共同爱好Java的同仁们一同提高.
前两次辨别报告了关于jvm、jdk、jre、collection、classLoader和一些Design Pattern的自我理解.这次仍旧不预备开始过渡到j2ee中,因为认为还有一些琐碎的j2se的问题没有总结完毕.
1.关于Object类理解
大家都知道Object是全部Java类的基类,意味着全部的Java类城市担当了Object的11个办法.倡议大家去看看Object的11个成员函数的源代码,就会知道默许的实现方法.比方equals办法,默许实现就是用"=="来对比,即直接对比内存地址,返回true 大概 false.而toString()办法,返回的串构成方法是??
"getClass().getName() + "@" + Integer.toHexString(hashCode())"其实不用我过量的注释,大家都能看懂这个串的构成.接下来再看看hashCode():public native int hashCode();
由于是native办法,跟OS的处理方法相关,源代码里仅唯一一个声明罢了.我们有爱好的话完好可以去深究它的hashCode毕竟是由OS怎么样产生的呢?但笔者倡议最重要的还是先记着利用它的几条原则吧!首先假如equals()办法相同的对象具有相通的hashCode,但equals ()对象不相通的时刻并不保证hashCode()办法返回差别的整数.并且下一次运行同一个程序,同一个对象未必还是当初的那个hashCode() 哦.
别的的办法呢?nofigy()、notifyAll()、clone()、wait()都是native办法的,阐明依靠于操作系统的实现.最后一个风趣的办法是finalize(),近似C++的析构函数,签名是protected,证明只有担当扩大了才能利用,办法体是空的,默示什么也不做.它的作用据笔者的理解仅仅是告诉JVM此对象不再利用,随时可以被销毁,而实际的销毁权还是在于虚拟机手上.那么它真的什么也不做麽?未必,实际上假如是线程对象它会招致在一定范围内该线程的优先级别提高,招致更快的被销毁来节俭内存提高性能.其实从常理来说,我们也可以大约这样猜想出jvm做法的目的.
2.关于重载hashCode()与Collection框架的关系
笔者曾经听一位搞Java培训多年的前辈说在他看来hashCode办法没有任何意义,仅仅是为了配合证明具有一样的hashCode会招致equals办法相等而存在的.连有的前辈都犯这样的错误,其实阐明它还是满简单被忽视的.那么hashCode()办法到底做什么用?
学过数据构造的课程大家城市知道有一种构造叫hash table,目的是通过给每个对象分配一个唯一的索引来提高查询的效率.那么Java也不会肆意扭曲改变这个概念,所以hashCode唯一的作用就是为支持数据构造中的哈希表构造而存在的,换句话说,也就是只有效到调集框架的 Hashtable、HashMap、HashSet的时刻,才需求重载hashCode()办法,这样才能使得我们能人为的去掌握在哈希构造中索引能否相等.笔者举一个例子:曾经为了写一个求解类程序,需求随机列出1,2,3,4构成的差别布列组合,所以笔者写了一个数组类用int[]来存组合后果,然后把随机产生的组合加入一个HashSet中,就是想操纵HashSet不包含反复元素的特点.但是HashSet怎么判断是不是反复的元素呢?当然是通过 hashCode()返回的后果能否相等来判断啦,可做一下这个实行:
int[] A = {1,2,3,4};
int[] B = {1,2,3,4};
System.out.println(A.hashCode());
System.out.println(B.hashCode());
以上是“Java学习杂谈(三)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:Java学习杂谈(四)
- ·下一篇文章:<b>Java学习杂谈(二)</b>
- ·中查找“Java学习杂谈(三)”更多相关内容
- ·中查找“Java学习杂谈(三)”更多相关内容