集合框架面试题

首先要说一下数组

1.数组和集合的区别

空间大小比较:数组的空间大小是固定了,所以需要提前确定合适的空间大小,集合的空间是动态增长的,而且每次添加新的元素的时候都会检查内部数组的空间是否足够存储

内容比较:数组在存放的时候一定是同种类型的元素,集合就不一定了可以包含基本类型和对象类型,集合却只能包含对象类型

方法上的比较:集合方法比数组更多样化,支持迭代器操作

集合的种类

2.Collection 和 Collections 有什么区别?

1、Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

2、Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

3.List、Set、Map 之间的区别是什么?

List接口

继承了Collection接口

List集合的特点:

  • 可以添加重复的数据

  • 数据可以通过下标单独访问

  • 数据可以排序

Set接口

继承了Collection接口

Set集合的特点:

  • 不能添加重复的数据

  • 数据不能单独访问

Map接口

Map集合的特点:

  • 数据以键值对保存

  • 键不能重复

  • 数据可以通过键访问

4.ArrayList 和 LinkedList 的区别是什么?

  1. 数据结构:ArrayList是数组,LinkedList是双向链表

  2. ArrayList查找性能高(因为通过下标快速定位),插入和删除性能低(移动大量数据)

  3. LinkedList查找性能低(因为要向前或向后依次查找),插入和删除姓高(只需要修改前后指针,不用移动)

5.ArrayList 和 Vector 的区别是什么?

  1. Vector是线程安全的,ArrayList是非线程安全的

  2. ArrayList性能高于Vector

  3. Vector的扩容量可以指定,如果不指定就扩容2倍;ArrayList扩容1.5倍

6.set集合 

HashSet集合

数据结构:散列表

通过哈希算法(散列)计算数据的位置,无序

注意:添加的数据必须实现hashCode和equals方法

HashSet中封装一个HashMap集合,数据添加到HashMap的键

reeSet集合

添加的数据会自动排序,对象必须实现Comparable接口

LinkedHashSet集合

一种散列表集合,同时添加单向链表保存添加顺序

能够保留添加顺序

7.HashMap 和 Hashtable 和ConcurrentHashMap有什么区别?

hashtable用法和结构和HashMap一样

区别:

  1. Hashtable是线程安全的,HashMap是非线程安全的

  2. HashMap的性能高于Hashtable

  3. Hashtable不能接收null作为键和值,HashMap可以

hashTable再进行操作时会锁住一整个code表

ConcurrentHashMap是cope表分成了很多段(即16个桶),那么操作时就会分段锁,可以同时进行多个操作

8.hashMap的原理

数据结构: 一维数组 + 单向链表 + 红黑树

添加数据的步骤:

  1. 通过键的hashCode值计算出数组的下标

  2. 判断该下标位置是否为空,如果为空,直接添加键值对

  3. 如果该位置有数据(哈希冲突、哈希碰撞),就调用键的equals方法和该位置的原有键做比较

  4. 如果相等,就用新值覆盖原来的值

  5. 如果不相等,放到原有数据后面,形成单向链表

  6. 在jdk1.8后,单向链表的长度达到8,就转换为红黑树

HashMap的默认长度 16

TreeMap集合

键会自动排序

LinkedHashMap集合

键会保留添加顺序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值