精选集合面试题整理

精选集合面试题整理_第1张图片

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

    答:Map 接口和Collection接口是所有集合框架的父接口

    1. Collection接口的子接口包括:Set接口和List接口

    2. Map 接口的实现类主要有:HashMap、TreeMap、HashTable、ConcurrentHashMap 以及Properties等

    3. Set接口的实现类主要有:HashMap TreeSet LinkedHashSet等

    4.List接口的实现类主要有:ArrayList、LinkedList、Stack 以及Vector等

2. HashMap 与HashTable的区别?

    1. HashMap没有考虑同步,是线程不安全的;Hashtable使用了synchronized关键字 是线程安全的;

    2.HashMap允许K/V都是null,后者K/V都不允许为null;

    3. HashMap继承自AbstractMap类;而Hashtable继承自Dictionary类

3. ArrayList 和 Vector 区别?

         1) 同步性:Vector是线程安全的(同步的),而ArrayList是线程不安全的;

          2)数据增长:当需要增长时,Vector默认增长一倍,而ArrayList却是一半。

4. List   Map  Set 三个接口,存取元素时,各有什么特点?

        List以特点次序来持有元素时,可有重复元素,Set无法拥有重复元素,每部排序。Map保存key-value值,value可多值。

5. set 里的元素不能重复。那么用什么方法来区分重复与否呢?

        Set里元素是不能重复的,用equals() 方法区分重复与否。覆盖equals() 方法用来判断对象的内容是否相同,而"==" 来判断地址是否相等,用来确定引用值是否是同一对象。

6. HashMap 和 Hashtale的区别?

        二者都实现Map接口,是将唯一键映射到特点的值上,主要区别与:

 1. HashMap没有排序,允许一个null键和和多个null值,而HashMap不允许。

 2. HashMap把HashMap的contains方法去掉了,改成containvalue和containKey,因为contains方法容易让人引起误解。

3. Hashtable继承自Dictonary类,HashMap是java1.2引进的Map接口的实现。

4. Hashtable的方法是同步的,而HashMap不是,在多个线程访问Hashtable时,不需要为它的方法实现同步,而HashMap就必须为之提供外同步,

7. Collection 和 Collections的区别

    Collection是java.uitl 下的接口,他是各种集合的父接口,继承于它的接口主要有set 和list;Conllecitons是个java.util下的类,是针对集合的帮助类,提供一系列静态方法对各种集合的搜索,排序,线程安全化等操作。

线程安全的map

1. synchronizedMap

        这种是直接使用工具类里面的方法创建SynchronizedMap, 把传入进行的HashMap对象进行了包装同步而已,看出SynchronizedMap的实现方式是加了对象锁,每次对HashMap的操作,都要先获取mutex的对象锁才能进入,所以性能也不会比HashTable好到那里去,也不建议使用。

2. ConcurrentHashMap

这个也是最推荐使用的线程安全的Map,也是实现方式最复杂的一个集合,每个版本的实现方式也不一样,在jdk8之前是使用分段加锁的一个方式,分成16个桶。每次只加锁其中一个桶,而在jdk8之后又加入了红黑树和CAS算法来实现

原文链接 java集合必会14问

8. 遍历List

```


```

你可能感兴趣的:(精选集合面试题整理)