面试题-集合

1.JAVA 中数组和集合的区别 ?

(1)数组的长度是固定的,而集合长度是可以改变的。

(2)数组可以储存基本数据类型和引用数据类型,而集合只能储存引用数据类型(也就是对象)。

(3)定义数组时必须指出数组元素的类型,而集合默认其中所有元素的类型都是 Object 类型的。

2.Collection 和Collections 的区别 ?

(1)Collection 是集合类的上级接口,继承于它的接口主要有 Set 和 List。

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

3.List 和 Set 的区别 ?

(1)List 是有序的可重复的集合,而 Set 是无序的不可重复的集合。

(2)List 允许插入多个 Null 值,而 Set 只允许包含一个 Null 值。

4.ArrayList 和 LinkedList 和 Vector 的区别 ?

(1)ArrayList 和 Vector 都是基于动态数组实现的,查询和修改数据快,而插入和删除数据慢,ArrayList 是线程

不安全的,Vector 是线程安全的,所以 Vector 的性能比 ArrayList 的性能差。

(2)LinkedList 是基于双向链表实现的,插入和删除数据快,而查询和修改数据慢。

5.HashTable 和 HashMap 的比较 ?

(1)HashTable 是线程安全的,而 HashMap 是线程不安全的。

(2)HashTable 不允许有 Null 值 (key 和 value 都不可以为 Null),而 HashMap 允许有 Null 值 (key 和 value 都

可以为 Null)。

(3)HashTable 和 HashMap 的遍历方式差别不大,HashTable 仅仅比 HashMap 多了一个 elements 方法。

6.HashMap 和 ConcurrentHashMap 区别 ?

(1)HashMap 是线程不安全的,而 ConcurrentHashMap 是线程安全的。

(2)HashMap 不支持线程同步,而 ConcurrentHashMap 采用分段锁来实现线程同步,类似于多个

HashTable。

7.HashSet 和 TreeSet 的区别 ?

(1)HashSet 是由一个 hash 表来实现的,所以它的元素是无序的。TreeSet 是由一个树形的结构来实现的,所

以它的元素是有序的。

(2)HashSet 的元素可以为 Null,且只能有一个为 Null,而 TreeSet 的元素都不能为 Null。

(3)HashSet 底层是通过 HashMap 实现的,而 TreeSet 底层是通过 TreeMap 实现的。

8.HashTable 和 HashMap 底层实现原理 ?

(1)HashTable 底层实现原理是基于数组 + 链表,默认长度是11,扩容以后长度是 2n + 1。

(2)HashMap 的底层原理:JDK1.7 是数组 + 链表,JDK1.8 是数组 + 链表 + 红黑树,默认长度是16,扩容以后

是两倍 32,线程不安全,效率高。

9.HashMap 和 LinkedHashMap 的区别 ?

(1)HashMap 是无序的,HashMap 允许多条记录的值为 Null,但是最多只允许一条记录的键为 Null。

(2)LinkedHashMap 是 HashMap 的子类,是基于 HashMap 和双向链表来实现的, LinkedHashhMap 是有序

的, 它可以保证 HashMap 集合有序,存入的顺序和取出的顺序是一致的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值