java基础功底之集合

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处理固定大小的基本数据类型,相对比较慢

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值