集合

1. 什么是集合

集合类存放在java.util包中
集合类型分为三种:set、list、map
集合存放的都是对象的引用,而非对象本身,所以我们称集合中的对象就是集合中对象的引用
集合就是一个放数据的容器,准确的来说就是放数据对象引用的容器

2.集合的特点
存储对象 长度可变

3. 集合和数组的区别
数组是固定长度的,集合是可变长度的
数组能存储基本数据类型和引用数据类型,集合只能存储引用类型
数组存储的必须是同一类型,集合存储的对象可以是不同类型

4. List、Set、Map三者之间的区别?

  • List是一个存取顺序一致的容器,元素可以重复,可以存入多个null,继承Collection接口
  • Set是一个存取顺序可能不一致的容器,元素不能重复,不能存入null,继承Collection接口
  • Map是一个存储键值对的容器,key唯一,value可以重复,value可以为空,没有继承Collection接口

5. ArrayList 和 LinkedList的区别?

  • ArrayList 底层是动态数组,LinkedList 底层是双向循环链表
  • ArrayList访问数据比LinkedList 快
  • LinkedList增删数据速度比ArrayList块
  • ArrayList比LinkedList 内存利用率大 两者都不是线程安全

6. HashSet的实现原理
HashSet是基于HashMap实现的,HashSet的值存放在HashMap的key值上,HashMap的value值统一为PRESENT,HashSet的操作,基本上都是调用底层的HashMap的相关方法

7. HashSet 如何检查重复
当HashCodeSet调用add()方法时,它会先比较HashCode() ,然后在使用equals() 比较

8. HashSet 和 HashMap的区别

  • HashSet是存储对象的,HashMap是存储键值对的
  • HashSet是用对象来计算hashCode值,而HashMap是使用Key计算hashCode值

9. HashMap的原理
HashMap 是基于 Hash 算法实现的

  1. 当我们往HashMap中put元素时,利用key 的 hashCode重新计算出当前对象的元素在数组中的下标
  2. 存储时,如果出现hash值相同的key,(1) 如果key相同,就覆盖原始值 (2) 如果key值不同(出现冲突),将之前的key - value放入链表中
  3. 获取时,直接找到hash值对应的下标,再进一步判断key值是否相同,从而找到对应值

JDK1.8 之后,链表结点数到8个,就将链表转为红黑树

10. Comparable 和 Comparator 的区别

  • Comparable接口实际上是出自 java.lang 包,他有一个compareTo(Object obj) 方法来排序
  • Comparator接口实际上是出自 java.util 包,他有一个compare(Object obj1,Object obj2) 方法用来排序

11. HashSet、LinkedHashSet、TreeSet 三者的异同
HashSet 是Set的主要实现类,HashSet的底层是HashMap,是线程不安全的,可以存储null值
LinkedHashSet 是HashSet的一个子类,能够按照添加的顺序遍历
TreeSet 底层使用的是 红黑树,能够按照添加的顺序遍历,能够自然排序和自定排序

12. HashMap 和 TreeMap 的区别
HashMap的底层结构是 哈希桶,TreeMap的底层结构是 红黑树
HashMap的插入删除时间复杂度为O(1) ,TreeMap的插入删除时间复杂度为O(longN)
HashMap中的key无序,TreeMap中的key有序
HashMap中需要重写equals()和hashCode()方法,TreeMap中key必须能比较
HashMap的性能高

13. ConcurrentHashMap
JDK1.7 ConcurrentHashMap 底层采用了分段的数组和链表 实现,采用的是分段锁,JDK1.8 采用了数组+链表、红黑树,并发控制使用synchronized 和CAS来操作
分段锁:首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问

14. 什么是快速失败(fail-fast)
快速失败是Java 集合的一种错误检错机制,在使用迭代器对集合进行遍历的时候,我们在多线程下操作非安全失败的集合类,可能就会触发fail-fast机制,导致抛出异常。在单线程下,如果在遍历的过程中对集合的对象内容进行修改,也会导致发生fail-fast机制

15. 什么是安全失败(fail-safe)
采用安全失败机制的容器,在遍历时先复制原有集合内容,在拷贝的集合上进行遍历,所以,在遍历过程中对原集合所作的修改内容不能被迭代器检测到,故不会抛异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值