1.集合和数组的区别

1.集合和数组的定义,都是能够存放相同数据类型的数据结构。
2.数组的大小固定,而集合长度可变。
3.数组既可以存放基本数组类型,又可以存放引用数据类型;而集合只可以存放引用数据类型。

2.Collection和Collections的区别

1.Collection是各种集合的父接口,继承于它的接口主要有Set和List。
2.Collections是针对集合操作的一个工具类,提供了一系列的静态方法,该类不能被实例化。

3.List和Set的区别

1.List是有序的,可重复,可以通过下标访问
2.Set是无序的,不可重复,不可以通过下标访问

4.ArrayList和LinkedList和Vector的区别

1.ArrayList的底层数据结构是 数组 ,线程不安全,增删慢,查询快。(JDK1.2引出)
2.LinkedList的底层数据结构是 双向链表,线程不安全,增删快,查询慢。
3.Vector的底层数据结构是 数组,线程安全,增删快,查询慢。(JDK1.0引出,相当于早期的ArrayList)
注意:ArrayList在jdk1.8以后在创建对象时并不会为其分配内存空间,只有在调用put方法向其中存值时才会为其分配空间,数组容量为10,当数组容量要超出最大容量时进行扩容,扩容到以前的1.5倍;LinkedList不存在初始化内存空间的概念,他就是个双向链表,有数据就往后面加即可;Vector在创建数组的时候默认数组容量为10。

5.HashSet和TreeSet的区别

1.HashSet是哈希表实现的,存放的数据无序,有且仅能有一个null值。
2.TreeSet是二叉树实现的,存放的数据可以自动排序(自动排序不代表有序),不允许有null值。

6.HashSet和LinkedHashSet区别

最大的区别就是HashSet无序,LinkedHashSet有序。

7.HashMap和HashTable的比较

1.HashMap是线程不安全的,可以存null key值和null value值,默认长度为16,每次扩容长度翻倍。
2.HashTable是线程安全的,不可以存null key值和null value值,默认长度11,每次扩容先翻倍再+1。

8.HashMap和ConcurrentHashMap区别

1.HashMap是线程不安全的,可以存null key值和null value值。
2.ConcurrentHashMap线程安全,拥有 分段锁 机制,相当于把一个大的Map分割成多个小的HashTable,不可以存null key值和null value值。

9.HashMap和LinkedHashMap的区别

1.HashMap和LinkedHashMap的最大区别就是LinkedHashMap是有序的,而HashMap是无序的。
2.LinkedHashMap是基于HashMap加上双向链表实现的。

10.HashMap的底层原理(jdk1.8)

1.HashMap采用数组+链表+红黑树实现。
2.当链表长度达到8时,链表会转化为红黑树结构。当链表长度小于6时,会重新转化为链表结构。
3.当数组长度达到64时,也会转化为红黑树结构。