Java--面试准备

1、HashMap和Hashtable的区别

     不同点:容量上看hashmap初试大小为16,hashtable为11,hashmap的key和Value值可以为null而hashtable不可以,从并发的角度看,hashtable是线程安全的,低层方法采用sychronized作了同步,而hashmap是非线程安全的,hashtable实现Dictionary类而hashmap实现的是AbstractMap抽象类。

    相同点:底层数据结构都是散列表,都是通过分离链表法解决hash冲突,都实现了Map接口。

   附:解决hash冲突的方式:

   1)分离链表:将散列到同一个桶位中的的所有元素,保存到同一个链表中;

  2)开放地址法:a、线性探测法:相继查找下一个单元知道给单元为空(可以回绕,即类似循环链表);容易出现一次聚焦,即 

                              每次插入一个元素,可能会需要多次尝试才能解决冲突;

                             b、平方探测法:插入第i元素,当发生冲突时,查找i与当前位置冲突距离为i的平方的位置是否为空单元;容易出 

                              现二次聚焦,即当桶位大小不为素数时,一旦桶位填充超过一半就不能保证一次找到空的单元,出现插入失败;

                             c、再散列:当出现插入失败时,将桶的大小变为原来的2倍,然后重新计算所有的元素散列值,

2、Hashcode的作用

     java中每个对象都有一个hashcode,它为 散列表提供了快捷性,同一个对象它的hashcode一般是相同的,如果调用equals方法判断的对象相等,那么两个对象的hashcode一定是一样的,因此当对equals方法重写时一般都会对hashcode方法重写,从而保证一致性,两个对象的hashcode相同,并不代表他们是同一个对象,但是能够表示在散列表数据结构中,它们在同一个桶位中。

3、Java引用类型https://www.cnblogs.com/huajiezh/p/5835618.html

     4大引用类型:强引用、软引用、弱引用、虚引用

     作用:1、通过代码的方式决定对象的生命周期;

                2、便于JVM进行垃圾回收

    强引用:创建一个对象,并把这个对象赋值给一个引用变量。当一个对象,有引用变量指向时,该对象永远不会被JVM回收,即使出现

                  OutOfMermery(OOM)异常;

   软引用(SoftReference):如果一个对象具有软引用,当内存足够时,JVM就不会对它进行垃圾回收;当内存不足时,JVM就会适时回收软引用对

                 象,软引用常应用于对内存敏感的场合,如高速缓存图片缓存等;

                eg:MyObject obj = new MyObject();

                      SoftReference<MyObject> sf = new SoftReference<>(obj);//创建MyObject的软引用

                软引用不影响JVM对对象的垃圾回收;上例中MyObject为强可及对象,不能被垃圾回收,若令obj=null,则此时MyObject为软可及对象;

               软可及对象不会影响JVM对该对象的垃圾回收,JVM对软可及对象的回收根据其特定算法按照内存需求决定;

   弱引用(WeakReference):无论内存是否足够,JVM都能回收被弱引用关联的对象;

                eg:MyObject obj = new MyObject();

                     WeakReference wr= new WeakReference(obj);

               此时,JVM不能回收弱引用关联的对象,因为obj强引用存在,若使obj=null,则此时JVM能回收被弱引用关联的对象;

   虚引用(PhantomReference):如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收;

                eg:new MyObject 等价于 PhantomReference pr = new PhantomReference(new MyObject());

             虚引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列

             中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。

  软引用和弱引用
      对于强引用,我们平时在编写代码时经常会用到。而对于其他三种类型的引用,使用得最多的就是软引用和弱引用,这2种既有相似之处又有区别。它们都是用来描述非必需对象的,但是被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值