由于我不想把一篇文章的篇幅搞的过于长,而且关于Map类是超级重点,我决定把Map放在下一篇文章讲,这一篇文章我先来解读Collection类。
答:Collection接口下面还有两个子接口List和Set,它们都会继承Collection接口定义的方法。
Collection接口是Java集合框架中最基本的接口,它定义了一组通用的方法,用于操作和管理集合中的元素。这些方法包括添加元素,删除元素,判断集合是否为空,获取集合大小,判断集合中是否包含某个元素,遍历集合等。所以说要定义这么多的方法。
list本身是一个接口,如果想要使用该接口,可以使用该接口的实现类来完成,list接口的重点实现类有3个,分别是ArrayList
?、LinkedList
?、Vector
(1)ArrayList:? ?底层数据结构是数组,查询快,增删慢,效率高,线程不安全。
扩容机制:ArrayList中维护了一个Object类型的数组elementData。当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第一次添加,则扩容elementData为10,如果需要再次扩容,则扩容elementData为1.5倍。
(2)LinkedList :底层数据结构是链表,查询慢,增删快,效率高,线程不安全。
(3)Vector:? ? ? ?底层数据结构是数组,查询快,增删慢,效率低,线程安全。
扩容机制:Vector中维护了一个Object类型的数组elementData。当创建Vector对象时,如果使用哪个的是无参构造器,则默认elementData容量为10,如果需要再次扩容,就扩容elementData为2倍。如果指定大小,则每次直接按2倍扩容。
答:HashSet的底层是HashMap,HashMap的底层是(数组+链表+红黑树)
LinkedHashSet是HashSet的子类,LinkedHashSet的底层是一个LinkedHashMap,底层维护了一个(数组+双向链表)
ArrayList和Vector 是重点。一般会问 ArrayList 和 Vector 的区别,底层数据结构区别,扩容区别,是否线程安全等等。
HashSet 与 LinkedHashSet大概了解吧,相对来说,不那么重点,简单了解下底层数据结构实现以及一些应用场景就行,一般面试不会问的很细。另外就是 HashSet 的底层,其实维护了一个 HashMap。