java面试题——集合

为什么HashMap是线程不安全的?
HashMap 在并发执行 put 操作时会引起死循环。因为多线程会导致 HashMap 的 Node 链表形成环形数据结构,那样的话就会让next 节点永远不为空,就会引起死循环。

数组和链表的区别:
数组必须事先定义好长度,是从栈中分配空间的, 比较方便,但是自由度比较小
链表是动态地进行存储分配,是从堆中分配空间, 自由度大但是申请管理比较麻烦

HashCode的作用:
1.HashCode经常用来确定对象的存储地址。
2.如果两个对象相同,那么这两个对象的HashCode一定相同。
3.两个对象的HashCode相同,并不一定表示两个对象就相同。
4.如果对象的equals方法被重写,那么对象的HashCode也需要重写。

那些集合类是线程安全的?
Vector,Hashtable,Stack都是线程安全的,
Hashmap是在jdk1.5之后有了自己的线程安全类就是ConcurrentHashMap。

Collection和Collections的区别?
Collection是一个集合接口,Collection有很多详细的实现,例如:List,Set
Collections是针对集合类的一个帮助类,提供了静态方法对各种集合的搜索,排序,线程安全化等操作。

Array和ArrayList之间的区别?
Array可以存储基本数据类型的对象,ArrayList只能存储对象。
Array是指定固定大小的,而ArrayList是自动拓展的,
Array内置方法没有ArrayList多,比如addAll,RemoveAll,iteration等方法只有ArrayList有。

ArrayList LinkedList Vector的区别: 都是List的子接口,
ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高
LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高
Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低。

List 、Set、 Map之间的区别(特点)
List (接口): 有序,元素可以重复,可以插入多个Null元素
Set (接口): 无序,元素不可以重复,它只可以有一个Null元素
Map (接口): 保存键值对的映射,以key-value的形式存储元素,Map只能允许一个Null键,但可以允许多个Null值。

如何实现数组和List之间的转换?
数组转List:使用Arrays.asList(array)进行转换
List转数组:使用List自带的toArray()方法

HashMap和HashTable的区别?
1,hashMap去掉了HashTable的contains方法,但是加上了containsKey()和containsValue()方法。
2,HashTable 线程安全。HashMap线程不安全,
3,HashTable不允许null值(key和value都不可以)HashMap允许null值。
4,HashTable使用Enumeration(爱牛莫瑞神),HashMap使用Iterator

Heap和stack有什么区别?(堆和栈)
堆的空间是手动申请和释放的,空间大。
栈的空间是由操作系统自动分配和释放的,空间小。

HashMap底层实现原理
HashMap 底层数据结构是数组+链表。是基于 Hash 算法实现的,通过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. HashCode 计算出hash值。然后将value保存在bucket中。当计算出 hash 值相同时,就被称为hash 冲突,HashMap 的做法是用链表和红黑树存储。当 hash 冲突的个数比较少时,使用链表否则使用红黑树。

put方法原理:根据key通过hash算法和与运算计算出index,如果index 位置为空,则直接put,如果不为空,用当前的key和链表中每个节点的key进行equals(),如果都返回false,就会放在链表的末尾,相反,如果有一个返回true,那么这个节点的value会被覆盖。

get方法原理:通过hash函数计算出hash值,在通过hash值计算index,使用index定位所在的链表,通过key.equals方法比较链表中的每一个key,有一个true则表示找到元素,都为false,则表示没有该元素,则返回null

请说出几个你常用的线程安全的集合类
Vector(ArrayList的前身:相对于ArrayList其中的方法都加了synchronized修饰符,效率偏低)
Hashtable
Properties(Hashtable的子类,常用作读取properties的配置文件)

哪些集合类提供对元素的随机访问?
ArrayList、HashMap、HashTable、TreeMap类提供对元素的随机访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值