Java集合相关面试题

目录

一,Java集合框架体系

二,List相关面试题

1,数组的定义

面试题:为什么数组索引从0开始呢?假如从1开始不行吗?​编辑

操作数组的时间复杂度

总结

2,ArrayList源码分析

1,成员变量

2,构造方法

3,添加操作 

面试题1:ArrayList底层的实现原理是什么?

面试题2:ArrayLisst list = new ArrayList(10)中list扩容几次了?

面试题3:如何实现数组和List之间的转换?(注意是否存在影响)

 3,LinkedList

1,单向链表

2,双向链表

面试题:ArrayList和LinkedList有什么不同?

 三,HashMap相关面试题

 1,相关数据结构

1,二叉搜索树

2,红黑树

3,散列表(哈希表Hash Table)

 2,Hash相关面试题

面试题:请你说说HashMap的实现原理?

面试题:HashMap的jdk1.7和jdk1.8有什么区别?

面试题:HashMap的put方法的具体执行流程?

面试题:HashMap的扩容机制原理

面试题:HashMap的寻址算法​编辑

面试题:为何HashMap的数组长度一定是2的次幂? 

面试题:HashMap在1.7情况下的多线程死循环问题是什么?


一,Java集合框架体系

 

Java集合相关面试题_第1张图片

 二,List相关面试题

Java集合相关面试题_第2张图片

 

1,数组的定义

Java集合相关面试题_第3张图片

Java集合相关面试题_第4张图片

 面试题:为什么数组索引从0开始呢?假如从1开始不行吗?Java集合相关面试题_第5张图片

操作数组的时间复杂度

1,查找

随机查询(根据索引查询): O(1)

未知索引查询:

        顺序查询:O(n)

        二分查找(有序数组):O(log n)

2,删改

因为数据是一段连续的内存空间,因此为了保准数组的连续性会使得数据的插入和删除效率变得很低(需要移动元素)

 Java集合相关面试题_第6张图片

 总结

Java集合相关面试题_第7张图片

 2,ArrayList源码分析

Java集合相关面试题_第8张图片

 1,成员变量

Java集合相关面试题_第9张图片

 2,构造方法

Java集合相关面试题_第10张图片

3,添加操作 

Java集合相关面试题_第11张图片

1,第1添加,初始化(第一次添加数据-扩容情况)

Java集合相关面试题_第12张图片

 2,第2-10次添加数据(无扩容)

Java集合相关面试题_第13张图片

 3,第11次添加(扩容操作)

Java集合相关面试题_第14张图片

//Array.copyof()是一种数组复制拷贝方法,不同的数据类型
//使用了不同的实现,但是算法思路一样,且都用到了System.arraycopy
//下面以Int类型为例
public static int[] copyOf(int[] original, int newLength) {
    int[] copy = new int[newLength];
    System.arraycopy(original, 0, copy, 0,
            Math.min(original.length, newLength));
    return copy;
}

 面试题1:ArrayList底层的实现原理是什么?

Java集合相关面试题_第15张图片

面试题2:ArrayLisst list = new ArrayList(10)中list扩容几次了?

Java集合相关面试题_第16张图片

 面试题3:如何实现数组和List之间的转换?(注意是否存在影响)

Java集合相关面试题_第17张图片

 3,LinkedList

1,单向链表

Java集合相关面试题_第18张图片

Java集合相关面试题_第19张图片

Java集合相关面试题_第20张图片 Java集合相关面试题_第21张图片

 2,双向链表

Java集合相关面试题_第22张图片

 Java集合相关面试题_第23张图片

 Java集合相关面试题_第24张图片

面试题:ArrayList和LinkedList有什么不同?

一共四个点回答:

  1. 底层数据结构
  2. 操作效率
  3. 内存空间利用率
  4. 线程安全

Java集合相关面试题_第25张图片

Java集合相关面试题_第26张图片

 三,HashMap相关面试题

Java集合相关面试题_第27张图片

 1,相关数据结构

1,二叉搜索树

Java集合相关面试题_第28张图片

Java集合相关面试题_第29张图片

 Java集合相关面试题_第30张图片

 Java集合相关面试题_第31张图片

 2,红黑树

Java集合相关面试题_第32张图片

Java集合相关面试题_第33张图片

Java集合相关面试题_第34张图片

 3,散列表(哈希表Hash Table)

Java集合相关面试题_第35张图片

 Java集合相关面试题_第36张图片

Java集合相关面试题_第37张图片

Java集合相关面试题_第38张图片 

Java集合相关面试题_第39张图片

1,数据+链表 实现散列表存在的问题 

Java集合相关面试题_第40张图片

 2,数据+链表+红黑树 解决退化问题

Java集合相关面试题_第41张图片

 Java集合相关面试题_第42张图片

 总结:Java集合相关面试题_第43张图片

 2,Hash相关面试题

面试题:请你说说HashMap的实现原理?

Java集合相关面试题_第44张图片

 面试题:HashMap的jdk1.7和jdk1.8有什么区别?

  1. 底层数据结构:1.7中是数组+链表,1.8中是数组+链表+红黑树
  2. 链表插入方式:1.7是头插法,而1.8是尾插法
  3. 哈希算法复杂度:1.7更为复杂且耗性能(因为1.8采用了红黑树,散列性要求较低) 

Java集合相关面试题_第45张图片

 Java集合相关面试题_第46张图片

面试题:HashMap的put方法的具体执行流程?

Java集合相关面试题_第47张图片

 Java集合相关面试题_第48张图片

 

 Java集合相关面试题_第49张图片

Java集合相关面试题_第50张图片

  

 面试题:HashMap的扩容机制原理

流程图:

Java集合相关面试题_第51张图片

 总结:

Java集合相关面试题_第52张图片

链表拆分演示:

Java集合相关面试题_第53张图片 

 

 面试题:HashMap的寻址算法Java集合相关面试题_第54张图片

面试题:为何HashMap的数组长度一定是2的次幂? 

Java集合相关面试题_第55张图片

 面试题:HashMap在1.7情况下的多线程死循环问题是什么?

Java集合相关面试题_第56张图片

 Java集合相关面试题_第57张图片

Java集合相关面试题_第58张图片 

 

你可能感兴趣的:(Java面试笔记,java,开发语言)