1.java 容器都有哪些?
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2DFh2S0V-1638496085651)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211129145218109.png)]](https://i-blog.csdnimg.cn/blog_migrate/9aaa9dbc9d19391f70548d74565f36d6.png)
2.Collection 和 Collections 有什么区别?
Collection是存储数据的一个容器,是一个接口,由子类set或者list集合来实现
Collections是一个工具类,里面有许多的静态方法,对集合进行操作
3.List、Set、Map 之间的区别是什么?
![ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQRhnqyc-1638496085653)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211129145254586.png)]](https://i-blog.csdnimg.cn/blog_migrate/6e295845fa8d46f30b5171f7b87fd910.png)
4.HashMap 和 Hashtable 有什么区别?
1.HashMap不是安全的,Hashtable是安全的
2.HashMap效率比Hashtable的效率快
3.HashMap的键和值可以有null值,而Hashtable不可以有null值
5.如何决定使用 HashMap 还是 TreeMap?
1、HashMap使用的是数组和链表存储,在添加删除的操作时,多使用HashMap
2、TreeMap是使用的树存储,对有序的key集合便利的时候使用TreeMap
6.说一下 HashMap 的实现原理?
1.HashMap的底层使用的是hash表,提供映射操作,不能保证集合的顺序性,可使用null值和null键
2.使用数组和链表存储(链表散列),jdk8之后(数组+链表+红黑树)
3.当添加元素时,key的hashcode会重新计算hash值,根据hash值得到这个元素在数组中的下标位置,如果该位置有其他元素,则以链表形式存储,新加入的放在链头,最先加入的放入链尾。如果数组中该位置没有其他元素,添加的元素就直接放在该位置上
4.JDK8之后,当链表索引位置的节点数超过8个(阈值8)之后,数组长度大于等于64,就会触发红黑树节点,进行扩容。就会使用红黑树来存储来提高查询效率。从原来的时间复杂度O(n)变为O(logn)
5.默认初始容量是16,容量必须是2的N次方,例如传 9,容量为16。
7. 说一下 HashSet 的实现原理?
HashSet底层由hashMap来实现的
HashSet的值存放在hashMap的key上
HashMap的value统一为PRESENT
8.ArrayList 和 LinkedList 的区别是什么?
List:有序且可重复的(调用对象的equals方法进行比较)
ArrayList:增删慢,查询快(底层用数组实现)支持随机访问 查询时间复杂度O(1)
LinkedList:增删快,查询慢(双向循环链表实现) 不支持随机访问 查询时间复杂度o(n)
9.如何实现数组和 List 之间的转换?
List -> 数组:调用ArrayList中的toArray()方法
数组 -> List:调用Arrays中的asList方法(数组的长度不可以被改变)
10.ArrayList 和 Vector 的区别是什么?
Vector:底层用数组实现,线程安全,效率低
ArrayList:增删慢,查询快(底层用数组实现)
11.Array 和 ArrayList 有何区别?
Array可以容纳基本类型和对象,而ArrayList只能容纳对象
Array指定大小,而ArrayList的大小是固定的
Array没有ArrayList的一些功能(addAll/removeAll/irerator)
12.在 Queue 中 poll()和 remove()有什么区别?