6. Hashcode的作用

1.在HashMap、HashTable..等集合类中,采用邻接矩阵的数据结构实现,hashCode()值用来散列存储结构中确定对象的存储地址。

2.找到目标地址后,在链表的遍历中使用equals()方法判断两个对象的内容是否相同。

3.如果equals()被重写,那么该对象的hashCode()也要被重写,以保证2中的条件成立。

4.由邻接矩阵的结构可知,hashCode值相同的对象,其内容不一定相同,只能说明他们存放在同一条链表中。

2016/9/26 21:49 下午 posted in  Java

5. Java的四种引用,强弱软虚,用到的场景

Java对对象的引用分为四种:
1.强引用。强引用的对象不会被垃圾回收器回收。内存不足时,宁可抛出OOM错误也不会回收强引用。

2.软引用。可有可无的引用,当JVM内存足够的时候不会被回收;当JVM内存不足的时候,发现软引用的存在,会回收软引用。

3.若引用。可有可无的引用,一旦被垃圾回收器发现,马上就被其回收。

4.幽灵引用。它一般用来标记被回收的对象,当对象被回收后,会受到一条消息。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。

2016/9/26 21:39 下午 posted in  Java

4.Object有哪些公用方法?

1.clone方法

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2.getClass方法

final方法,获得运行时类型。

3.toString方法

该方法用得比较多,一般子类都有覆盖。

4.finalize方法

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。自动垃圾收集 器 会 调用 finalize() 方法。

5.equals方法

该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

6.hashCode方法

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hashCode()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

7.wait方法

wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法

该方法唤醒在该对象上等待的某个线程。

9.notifyAll方法

该方法唤醒在该对象上等待的所有线程。

2016/9/26 21:37 下午 posted in  Java