1.Java中常见的集合及其关系?

Java面试整理-基础篇8.集合1

2.ArrayList、LinkedList、Vector的区别?

  1. LinkedList、ArrayList、Vector都是List接口的子类;LinkedList基于双向链表实现,ArrayList、Vector基于数组实现。
  2. ArrayList采用懒加载模式,在第一次添加元素时,初始化内部数组,初始大小为10,扩容大小为原先为1.5倍,采用异步处理,线程不安全,性能较高,在大部分场景下适用。
  3. Vector在产生对象时,初始化一个大小为10的内部数组、扩容为原先的2倍,采用synchronized修饰常用的crud方法,线程安全,性能较低(读读互斥)。
  4. ArrayList和LinkedList由于实现原理的不同(双向链表和数组),常见的插入删除在尾部时使用ArrayList比较快,在指定位置的时候使用LinkedList。

3.通过Collections.SynchornizedList、Vector的区别?

  1. 通过Collections.synchronizedList()方法可以将线程不安全的List转成线程安全的List。
  2. Collections.SynchronizedList使用了委托(delegation),实质上存储使用的是构造时传入的list,只是将list作为底层存储。Collections.SynchronizedList使用synchronized代码块对mutex对象加锁,mutex对象可以通过构造函数传入,也就是可以指定锁定的对象。
  3. Vector则是对整个方法使用了synchronized,所以不能对同步进行细粒度的控制。而且同步方法加锁的是this对象,没办法控制锁定的对象。
  4. 由于Collections.SynchronizedList比Vector多了一层封装,所以Vecgor比Collections.SynchronizedList的效率略高。

4.Set和List的区别?

  1. List允许插入重复的元素,Set不允许重复元素。
  2. List是有序集合,会保留元素插入时的顺序,Set是无序集合。
  3. List可以通过下标来访问,Set不能。

5.Set是如何保证元素不重复的?

Set根据实现方式主要分为两大类,HashSet和TreeSet。

  1. HashSet是由哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。
  2. TreeSet是由二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。

6.Collection和Collections的区别

  1. java.util.Collection是一个集合接口(集合类的顶级接口)。提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
  2. Collections则是集合类的一个工具类,提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

7.Arrays.asList获得的List使用时有什么需要注意的?

  1. 在使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException。因为Arrays.asList()返回的是java.util.Arrays$ArrayList而不是ArrayList。
  2. ArraysArrayListArrayListAbstractListremoveaddmethodAbstractListthrownewUnsupportedOperationException();ArrayListAbstractList(override)ArraysArrayList和ArrayList都继承AbstractList,而remove,add等method在AbstractList中默认实现仅有`throw new UnsupportedOperationException();`而不做其他处理。ArrayList继承AbstractList后重写(override)了这些方法,而ArraysArrayList则是保留了默认实现抛出java.lang.UnsupportedOperationException。

附言

  • 转载请注明出处
  • 更多文章,请关注公众号《百育科技》,公众号会定期按系列整理文章

相关文章:

  • 2021-05-15
  • 2021-07-03
  • 2021-08-26
  • 2022-12-23
  • 2022-01-02
  • 2021-05-05
猜你喜欢
  • 2021-07-02
  • 2021-06-22
  • 2022-01-19
  • 2022-12-23
  • 2021-10-07
  • 2021-10-18
  • 2022-02-01
相关资源
相似解决方案