加入收藏 | 设为首页 |

雷火电竞app下载-Java后端精选中高级面试题:第一节

海外新闻 时间: 浏览:239 次

List和Set比较,各自的子类比较

比照一:Arraylist与LinkedList的比较

1、ArrayLis雷火电竞app下载-Java后端精选中高级面试题:第一节t是完结了根据动态数组的数据结构,由于地址接连,一旦数据存储好了,查询操作功率会比较高佟丽娅性感(在内存里是连着放的)。

2、由于地址接连, ArrayList要移动数据,所以刺进和删去操作功率比较低。

3、LinkedList根据链表的数据结构,地址是恣意的,所以在拓荒内存空间的时分不需求等一个接连的地址,关于新增和删去操作add和remove,LinedList比较占优势。

4、由于LinkedList要移动指针,所以查询操作功用比较低。

适用场景剖析:

当需求对数据进行对此拜访的状况下选用ArrayList,当需求对数据进行屡次添加删去修改时选用LinkedList。


比照二:ArrayList与Vector的比较

1、Vector的办法都是同步的,是线程安全的,而ArrayList的办法不是,由于线程的同步必定要影响功用。因而,ArrayList的功用比Vector好。

2、当Vector或ArrayList中的元素超越它的初始巨细时,Vector会将它的容量翻倍,而ArrayList只添加50%的巨细,这样。ArrayList就有利于节省内存空间。

3、大多数状况不运用Vector,由于功用欠好,可是它支撑线程的同步,即某一时刻只要一个线程能够写Vector,防止多线程一起写而引起的不一致性。

4、Vector能够设置增加因子雷火电竞app下载-Java后端精选中高级面试题:第一节,而ArrayList不能够。


适用场景剖析:

1、Vector是线程同步的,所以它也是线程安全的,而ArrayList是线程异步的,是雷火电竞app下载-Java后端精选中高级面试题:第一节不安全的。假如不考虑到线程的安全要素,一般用ArrayList功率比较高。

2、假如调集中的元素的数目大于现在调集数组的长度时,在调集中运用数据量比较大的数据,用Vector有必定的优势。

比照三:HashSet与TreeSet的比较

1.TreeSet 是二叉树完结的,Treeset中的数据是主动排好序的,不允许放入null值 。

2.HashSet 是哈希表完结的,HashSet中的数据是无序的,能够放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中仅有束缚 。

3.HashSe雷火电竞app下载-Java后端精选中高级面试题:第一节t要求放入的目标有必要完结HashCode()办法,放入的目标,是以hashcode码作为标识的,而具有相同内容的String目标,hashcode是相同,所以放入的内容不能重复。可是同一个类的目标能够放入不同的实例。

适用场景剖析:

HashSet是根据Hash算法完结的,其功用一般都优于TreeSet。咱们一般都应该运用HashSet,在咱们需求排序的功用时,咱们才运用TreeSet。


HashMap和ConcurrentHashMap的差异

1、HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。

2、ConcurrentHashMap选用锁分段技能,将整个Hash桶进行了分段segment,也便是将这个大的数组分成了几个小的片段segment,并且每个小的片段segment上面都有锁存在,那么在刺进元素的时分就需求先找到应该刺进到哪一个片段segment,然后再在这个片段上面进行刺进,并且这儿还需求获取segment锁。

3、ConcurrentHashMap让锁的粒度更精密一些,并发功用更好。

至于两者的底层完结,你假如想经过一篇文章就理解了,那就too young了,好好找些博文+看源码去吧。


HashTable和ConcurrentHashMap的差异

它们都能够用于多线程的环境,可是当Hashtable的巨细添加到必定的时分,功用会急剧下降,由于迭代时需求被确定很长的时刻。由于ConcurrentHashMap引入了切割(segmentation),不管它变得多么大,只是需求确定map的某个部分,而其它的线程不需求比及迭代完结才干拜访map。简而言之,在迭代的过程中,ConcurrentHashMap只是确定map的某个部分,而Hashtable则会确定整个map。


String,StringBuffer和StringBuilder的差异

1、运转速度,或许说是履行速度,在这方面运转速度快慢为:StringBuilder > StringBuffer > String。

2、线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。

适用场景剖析:

String:适用于少数的字符串操作的状况

StringBuilder:适用于单线程下在字符缓冲区进行很多操作的状况

StringBuffer:适用多线程下在字符缓冲区进行很多操作的状况


wait和sleep的差异

1、sleep()办法是归于Thread类中的,而wait()办法,则是归于Object类中的。

2、sleep()办法导致了程序暂停履行指定的时刻,让出cpu给其他线程,可是他的监控状况仍然保持着,当指定的时刻到了又会主动康复运转状况。所以在调用sleep()办法的过程中,线程不会开释目标锁。

3、调用wait()办法的时分,线程会抛弃目标锁,进入等候此目标的等候确定池,只要针对此目标调用notify()办法后本线程才进入目标确定池预备获取目标锁进入运转状况。

原文地址:https://dwz.cn/kgAfVqj2

作者:java经验总结