Java面试总结(集合篇)

28 篇文章 0 订阅
26 篇文章 0 订阅

1.ArrayList和LinkedList的区别

  1. 数据结构不同

ArrayList是基于动态数组,LinkedList是基于链表

  1. 效率不同

ArrayList查询和更新效率高;

LinkedList增加和删除效率高;

  1. 自由性不同

ArrayList自由性较低,但是使用比较方便;

LinkedList自由性较高,但是它不便于使用。

  1. 主要控件开销不同

LinkedList的主要控件开销比ArrayList的大。

2.HashMap和HashTable的区别

  1. 两者父类不同

HashMap继承AbstractMap类,HashTable继承Dictionary类。

  1. 对外提供的接口不同

HashTable比HashMap多提供了elments()和contains()两个方法。

  1. 对null的支持不同

HashMap:key可以为null,但是这样的key只能有一个,因为必须保证key的唯一性;可以有多个key值对应的value为null;

HashTable:key和value都不能为null。

  1. 安全性不同

HashMap线程不安全,多线程并发环境下,可能会产生死锁,但是效率高。

HashTable线程安全,但是效率低。

3.Collection和Collections的区别

CollectionCollections
集合类的上级接口,子接口有Set,List。是一个工具类,有很多静态方法,用于实现对各种集合的排序,搜索,线程安全化等操作。

4.泛型

“泛型” 意味着编写的代码可以被不同类型的对象所重用。

5.List,Set,Map三者的区别

接口类型特点
List有序可重复
Set无序不可重复
Map使用键值对存储

6.HashMap的底层存储原理

  1. HashMap继承自AbstractMap

  2. 该集合的数据结构:JDK1.8之前,采用的是数组+链表JDK1.8之后,采用的是数组+链表+红黑树。引入红黑树的目的是为了提高查询效率。

  3. JDK1.8之前,当创建了一个HashMap对象,构造方法底层会默认创建一个长度为16的Entry数组,用来存储键值对数据;JDK1.8之后是在第一次调用put方法时创建一个Node数组用来存储。

  4. 存储时会先调用key的hashcode()方法计算出值,再结合数组长度采用某种算法计算出向Node数组中存储数据的空间的索引值,若该索引代表的空间没有数据,则直接将键值对存储到该索引代表的空间中。当计算出的索引相同时,此时该空间已有数据,那么底层就会比较两个key的hash值是否一致,如果不一致,则在该空间上划出一个结点来存储键值对数据,这种方式称为拉链法。若索引相同,hash(比如重地,通话)值也相同,就会发生哈希碰撞,然后底层会调用equals方法比较key的内容是否相等,若相等,则其value后值覆盖前值,若不相等,则划出一个结点来存储数据。

  5. 当链表长度>8且数组长度>64,将链表转换为红黑树(平衡二叉树的一种),只满足链表长度>8,并不会转换为红黑树,而是对数组进行扩容,一般是先扩容为原来容量的2倍,再将原有的数据复制过来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值