Java集合面试题

说说常见的集合有哪些吧?

1、Map接口和Collection接口是所有集合框架的父接口。
2、Collection接口的子接口包括:Set接口和List接口
3、Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
4、Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
5、List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

HashMap与HashTable的区别?

1、HashMap没有考虑同步,是线程不安全的。Hashtable使用了synchronized关键字,是线程安全的。
2、HashMap允许K/V都为null。后者K/V都不允许为null。
3、HashMap继承自AbstractMap类。而Hashtable继承自Dictionary类。

线程安全和线程不安全区别?

线程安全就是多个并行线程访问共享数据时,采用了加锁机制,当一个线程访问共享数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供共享数据访问保护,有可能出现多个线程先后更改共享数据,造成所得到的共享数据是脏数据。

什么是哈希?

Hash,一般翻译为“散列”,也有直接音译为“哈希”的,这就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值(哈希值)。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。所有散列函数都有如下一个基本特性:根据同一散列函数计算出的散列值如果不同,那么输入值肯定也不同。但是,根据同一散列函数计算出的散列值如果相同,输入值不一定相同。

什么是哈希冲突?

当两个不同的输入值,根据同一散列函数计算出相同的散列值的现象,我们就把它叫做碰撞(哈希碰撞)。

HashSet是如何保证数据不可重复的?

HashSet的底层其实就是HashMap,由于HashMap的K值本身就不允许重复,并且在HashMap中如果K/V相同时,会用新的V覆盖掉旧的V,然后返回旧的V,那么在HashSet中执行这一句话始终会返回一个false,导致插入失败,这样就保证了数据的不可重复性。

Array和ArrayList 有什么区别?

1、Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
2、Array 大小是固定的,ArrayList的大小是动态变化的。
3、ArrayList 提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

ArrayList和LinkedList的区别?

1、LinkedList实现了List和Deque接口,一般称为双向链表。ArrayList实现了List接口,动态数组。
2、LinkedList在插入和删除数据时效率更高,ArrayList在查找某个index的数据时效率更高。
3、LinkedList比ArrayList需要更多的内存。

Enumeration和Iterator接口的区别?

1、Enumeration的速度是Iterator的两倍,也使用更少的内存。
2、与Enumeration相比,Iterator更加安全,因为当一个集合正在被遍历的时候,它会阻止其它线程去修改集合。
3、迭代器取代了Java集合框架中的Enumeration。迭代器允许调用者从集合中移除元素,而Enumeration不能做到。

原文地址:https://www.cnblogs.com/feiqiangsheng/p/12494249.html