1.ArrayList和Vector的区别
这两个类都实现了 List接口 ,他们都是有序集合,相当于动态数组 。
1)vector是线程安全的 ,而arraylist不是
,因为ArrayList不考虑线程安全的问题, 所以它的效率更高 ,如果有多个线程访问
最好使用Vector,这样就不需要考虑编写相关的线程安全代码。
2)扩容, ArrayList和Vector都有一个初始容量
,当需要扩容时Vector默认增长为原来的两倍,ArrayList增长为原来的1.5倍,他们都可以设置初始空间大小
,但Vector可以设置扩容时的空间大小而 ArrayList没有。
2.ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector 都是数组方式存储 ,如果在非末尾插入数据,需要元素移动等内存操作 ,所以它插入慢,而查询快(有下标),而Vector由于使用了Synchronized ,性能上要比ArrayList差 , LinkedList是
使用双向链表实现的存储,检索数据 需要 进行 前向及后向遍历 ,但插入 只需要记录 插入位置的前向和后项,所以它的插入速度快。
ArrayList 在查找时速度快,LinkedList在插入删除时速度快
3.快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么?
Iterator的 安全失败是基于对底层集合的copy,因此,它不受源集合上修改的影响。 java.util包下的所有集合类都是
快速失败,而java.util.concurrent包下面的类都是安全失败 快速失败
迭代器会抛出ConcurrentModificationException异常,而安全失败不会抛出异常。
4.hashMap的数据结构
在java语言中, 基本的数据就两种 ,一是数组 ,另外一个就是模拟指针,也就是常说的引用,所有的数据结构都可以用这两个基本机构来 构造,
hashMap实际上就是一个 数组 与 链表的结合体 (数据结构中一般叫 链表散列 ,也就是常说的散列表)
5.hashMap的工作原理
hashMap是以 键值对key-val的形式存储元素 ,通过key的hashCode来
寻址向集合添加或更新数据,hashMap的一些重要特性是,容量、负载因子、扩容极限
6.hashMap什么时候扩容
当hashMap中的元素个数超过数组大小loadFactor时 就会进行数组扩容;
loadFactor默认为0.75,也就是说默认情况下,数组大小16,当元素个数超过 16* 0.75 = 12的时候就会扩容.
扩容时会从新计算每个元素的位置,这是一个非常消耗性能的事,所以当我们已知hashmap中的元素个数时,那么我们预设元素个数可以有效的提高性能。
最佳初始大小公式 = key数量/0.75+1 ;
HashMap深入 请参考 https://blog.csdn.net/qq_43091847/article/details/103893001
7.List、Map、Set存取元素 各有什么特点
list与set 他们都来自一个父类collection,都是单列元素集合 ,set不允许重复的无序集合,所以set集合add时有一个boolean返回值,提示是否添加成功,set 无法获取第几个,所以遍历只能通过iterator获取所有,逐一遍历。 list是有先后顺序的有序集合,它允许重复,添加元素可以指定位置,获取除了通过iterator 也可以通过下标获取指定元素 map是 双列集合 ,添加元素 每次需要存储两个值k -v,不可存储重复的key,遍历可以通过keys,values及Map.entry集合
8.heap和stack区别
java的内存分为两类,一是栈内存,二是堆内存,栈内存是指,程序进入一个方法时,会分配给这个方法一块独立的私有存储空间,用来存储这个方法内部的局部变量,当方法结束随之释放掉。
堆与栈不同 ,一般用于存储方法栈之外的那些数据,如new对象,放在堆 不会随方法结束而消失,方法中的局部变量如果使用final 修饰,也会放在堆中,而不是栈中。
9.java集合类框架基本接口有哪些?
Collection,Set,List,Map
10.hashSet底层实现?
hashSet的实现是依赖与hashMap的 ,它的值都是存储在hashMap中的,在hashSet中会初始化一个hashMap对象,hashSet不允许重复值,因为 hashSet值是作为hashMap的key,存储在HashMap中了 ,但key存在就会返回false
11.什么是迭代器
Iterator接口,提供了很多对集合元素进行迭代的方法。每一个集合类都可以返回迭代器实例的迭代方法,迭代器可以在迭代过程中,删除集合元素,但不可以调用集合的remove
12.Iterator和ListIterator的区别是什么?
Iterator可以用来遍历Set和List集合 ,但ListIterator只能遍历List
Iterator对集合只能向前遍历,ListIterator可以前后遍历
13.Array数组和ArrayList列表有什么区别
Array可以包含基本类型和对象类型,ArrayList只能是对象类型 Array大小固定,ArrayList大小动态变化
ArrayList处理固定大小的基本数据类型,相对比较慢