Java集合重点详解+高频面试题——面试和学习都必备!

目录一、Java集合概述1.1 什么是Java集合?1.2 集合主要有哪些?1.3 集合框架详解图二、集合相关高频面试题2.01 ArrayList 和 Vector 的区别/异同?2.02 ArrayList 和 LinkedList 的区别/异同?2.03 HashMap的底层实现原理?2.04 HsahMap 和 Hashtable 的区别/异同?...
摘要由CSDN通过智能技术生成

目录

一、Java集合概述

 1.1 什么是Java集合?

1.2 集合主要有哪些?

1.3 集合框架详解图

 

二、集合相关高频面试题

2.01 ArrayList 和 Vector 的区别/异同?

2.02 ArrayList 和 LinkedList 的区别/异同?

2.03 HashMap的底层实现原理?

2.04 HsahMap 和 Hashtable 的区别/异同?

2.05 HashMap 容量的长度为什么总是2的幂次方?

2.06 HashSet 和 HashMap 的区别?

2.07 ConcurrentHashMap 是如何保证线程安全的(线程安全的实现方式)?

2.08 ConcurrentHashMap 和 Hashtable 的区别/异同 ?

2.09 ConcurrentHashMap能完全替代Hashtable吗?

2.10 集合的相关面试题 还会持续更新....


 

 

一、Java集合概述

     

 1.1 什么是Java集合?

Java集合类存放于java.util包内,是一个用来存放数据的容器;
(这里的数据是一个个的对象,如果存入基本数据类型的数据,会自动装箱成包装类;并且集合存放的是对象的引用,而不是对象本身。)

1.2 集合主要有哪些?

集合主要分为 Collection 和 Map(映射) 接口;

而 Collection 接口又有 List(列表) 、Set(集)、Queue(队列) 子接口;

这些接口的主要实现及优缺点可以看图:

1.3 集合框架详解图

 

 

 

二、集合相关高频面试题

 

2.01 ArrayList 和 Vector 的区别/异同?

  1. Vector类 是List接口的古老实现类(JDK1.0就有了),ArrayList类 是List接口的主要的常用的实现类(JDK1.2新增的)。
  2. Vector类 的方法全都是同步的,两个线程可以安全的访问一个Vector对象;
    但是如果一个线程访问Vector对象的话,要在同步操作上花费大量时间;
    而 ArrayList 不是同步的,如果不需要保证线程的安全,建议使用ArrayList,效率较高;
    (或者直接简单点说:Vector 线程安全但效率低,ArrayList 线程不安全但效率高。)
  3. Vector扩容方式默认是 当前容量的1倍;ArrayList扩容是 当前容量×1.5+1 。

 

2.02 ArrayList 和 LinkedList 的区别/异同?

  1. ArrayList 底层使用的是数组实现,LinkedList 底层使用的是双向链表实现。
  2. ArrayList 随机查找和遍历速度快,插入删除速度慢;LinkedList 随机查找和遍历速度快,插入和删除速度快。
  3. ArrayList 插入和删除元素的速度会受插入位置的影响;LinkedList 插入和删除元素的速度不会受插入位置的影响。
  4. ArrayList 内存空间会耗费在列表后面的预留空间;LinkedList 内存空间会耗费在每个数据要多存储一个前驱和后继。
  5. ArrayList 需要扩容,扩容是 当前容量×1.5+1 ; LinkedList 无需扩容。
  6. ArrayList 和 LinkedList 都不是同步的,都是不保证线程安全。

 

2.03 HashMap的底层实现原理?

jdk7及jdk7之前
底层是用 数组+链表 来实现的;

实现过程:

1. new HashMap() 之后,底层会创建一个长度为 16 的一维数组( Entry[] table )。

2. put 数据时( .put(key,value) ),会先调用 key 所在类的 hashCode 方法,计算出此key的哈希值,再将此哈希值经过处理计算后,得到该数据在数组table上的位置。

然后根据此位置来分情况判断是否存储:

情况一:
此位置为空, 直接在此位置上存储put的数据。

 

情况二:
此位置不为空,则说明此位置上已有一个或多个数据了(

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值