Java基础面试问题(1)

本文详细解析了List与Set的不同之处,探讨了HashSet如何确保元素唯一性,并深入分析了HashMap的工作原理,包括其线程安全问题及不同版本间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. List与Set的区别?

  • 都是Collection接口
  • List特点:元素有放入顺序,可重复
  • Set特点:元素放入无顺序,不可重复(虽然元素无放入顺序,但元素位置由hashcode决定,其实是固定的)
  • List的三个实现类:LinkedList、ArrayList、Vector
  • Set的两个实现类:HashSet(底层HashMap)、LinkedHashSet

2. HashSet如何保证不重复?

保存元素时,会先对比hash值,如果相等,再对比equal, 如果相等,就不存。如果不等,则存。底层用hashmap实现。

3. HashMap为什么不是线程安全的?

4. HashMap扩容简单过程描述?

先扩大Table,然后会对链表重新hash,顺序会变成逆序。

5. HashMap1.7和1.8的区别,1.8做了什么优化?

  • 1.7版本:1.7使用Entry数组存数据,如果hash值相同的话,会将数值放到链表。
  • 1.8版本:1.8使用Node数组,Node可能是链表或红黑树(key < 8时是链表,key > 8时是红黑树)
    1.8的关键点:实现compare方法,如果实现不正确,1.8会慢于1.7。

6. 强、软、弱、虚引用

  • 强引用:只要引用存在就不会被回收。new 出来的对象
  • 弱引用:非必须引用,内存溢出前回收。SoftReference
  • 软引用:垃圾回收发现后就会回收。WeakReference
  • 虚引用:垃圾回收时回收,无法通过引用取到对象值,用于追踪垃圾回收过程。PhantomReference。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值