失效链接处理 |
java面试笔记 PDF 下载
本站整理下载:
相关截图:
主要内容:
⼀,集合? 1,Vector和ArrayList的区别? 1,Vector的⽅法都是同步的,是线程安全的,⽽ArrayList的⽅法不是,由于线程的同步必然要影响 性能,因此,ArrayList的性能⽐Vector好。 2,当Vector或ArrayList中的元素超过它的初始⼤⼩时,Vector会将它的容量翻倍,⽽ArrayList只增 加⼤约1.5的⼤⼩,这样ArrayList就有利于节约内存空间。 3,Vector可以设置capacityIncrement(容量增⻓的参数),⽽ArrayList不可以。 4,List<Map<String,Object>> data=Collections.synchronizedList(new ArrayList<Map<String,Object>>());可以解决ArrayList的线程安全问题,或者使⽤ThreadLocal。 5,写时复制容器CopyOnWirteArrayList相当于并发的ArrayList,内部使⽤了可重⼊锁。 2,ArrayrList和LinkedList的区别? 1,ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2,对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针,数组的时间复 杂度是1,链表是n。 3,对于新增和删除操作add和remove,LinedList⽐较占优势,因为ArrayList要移动数据,数组的 时间复杂度是n,链表是1。 数组和链表的区别: 1,存取⽅式上,数组可以顺序存取或者随机存取,⽽链表只能顺序存取; 2,存储位置上,数组逻辑上相邻的元素在物理存储位置上也相邻,⽽链表不⼀定; 3,存储空间上,链表由于带有指针域,存储密度不如数组⼤; 4,按序号查找时,数组可以随机访问,时间复杂度为O(1),⽽链表不⽀持随机访问,平均需要O(n); 5,按值查找时,若数组⽆序,数组和链表时间复杂度均为O(n),但是当数组有序时,可以采⽤折半查找 将时间复杂度降为O(logn),但要注意⼆分的边界问题; 6,插⼊和删除时,数组平均需要移动n/2个元素,⽽链表只需修改指针即可; 3,ArrayList的动态扩容? 1,在JKD1.6中,如果通过⽆参构造的话,初始数组容量为10,每次通过copeOf的⽅式扩容后容量 为原来的1.5倍加1。 2,在JDK1.7中,如果通过⽆参构造的话,初始数组容量为0,当真正对数组进⾏添加时,才真正分 配容量,每次按照⼤约1.5倍(位运算)的⽐例通过copeOf的⽅式扩容。 3,在JKD1.8中,arraylist这个类中,扩容调⽤的是grow⽅法,通过grow⽅法中调⽤的 Arrays.copyof⽅法进⾏对原数组的复制,在通过调⽤System.arraycopy⽅法进⾏复制,达到扩容的⽬ 的。4,HashMap和TreeMap的区别? 1,实现 TreeMap:实现了SortMap接⼝,基于红⿊树,ConcurrentSkipListMap是并发的TreeMap
2 HashMap:基于哈希散列表实现,内部是⼀个数组,每个数组内是⼀个链表,链表可以扩展为红⿊树 2,存储 TreeMap:默认按键的升序排序 HashMap:随机存 3,遍历 TreeMap:Iterator遍历是排序的 HashMap:Iterator遍历是随机的 4,性能损耗 TreeMap:插⼊、删除速度慢,需要维护树的平衡 HashMap:基本⽆损耗 5,键值对 TreeMap:键、值都不能为null HashMap:键、值均可为null 6,安全 TreeMap:⾮并发安全Map HashMap:⾮并发安全Map 7,效率 TreeMap:低 HashMap:⾼ 5,HashMap和Hashtable有什么区别? 1,HashMap是⾮线程安全的,HashTable是线程安全的。 2,HashMap的键和值都允许有null值存在,⽽HashTable则不⾏。 3,因为线程安全的问题,HashMap效率⽐HashTable的要⾼。 4,Hashtable是同步的,⽽HashMap不是。因此,HashMap更适合于单线程环境,⽽Hashtable 适合于多线程环境。
|