Java 类集复习总结

类集复习(阅读部分源码)

1.ArrayList、Vector、LinkedList的关系与区别

  1. 以上三个类都是List接口下的常用子类,其中ArrayList与Vector基于数组实现,LinkedList基于双向链表实现
  2. ArrayList采用懒加载策略(第一次add时才初始化内部数组,默认初始化大小为10),扩容时扩容为原先数组的1.5倍,采用异步处理,线程不安全,性能较高。ArrayList在大部分场合(频繁查找、在集合末端插入与删除)都会使用到
  3. Vector在产生对象时就初始化内部数组为10,扩容时扩容为原先数组的2倍,采用synchronized修饰增删查改方法,线程安全性能较低(锁的力度太足,将当前集合对象锁住,导致读读都互斥),JDK内置的栈,是Vector的子类 用不到,性能太低
  4. LinkedList采用异步处理,线程不安全。在任意位置的频繁插入与删除时考虑使用,LinkedList是Queue接口的常用子类

2、什么的jcl中fail-fast机制?什么是fail-safe?

什么是快速失败?
优先考虑出现异常的情况,若异常产生,抛出异常,程序终止

jcl为何会产生ConcurrentModificationException?
if(modCount != exceptionModCount)
modCount 记录当前集合被修改(结构上)的次数
exceptionModCount 迭代器内部希望集合的修改次数(在获取集合迭代器时赋值,等于当前的集合修改次数)

意义: 避免多线程场景下的数据脏读问题,当有一个线程修改了数据,立马通知其他线程读取到过期的数据
java.util包下的直接子类 ArrayList、Vector、HashMap等都是fail-fast(除了TreeMap)
如何解决fail-fast:
a、多线程读,单线程写(在迭代遍历集合时,不要修改集合结构)
b、使用fail-safe 不抛出异常(juc包下的线程安全集合,如CopyOnWriteArrayList,ConcurrentHashMap等)

3、hashCode与equals的关系
hasnCode() :将任意一个对象根据指定的算法转为32位的int
equals():比较两个对象是否相等

equals相等的两个对象,hashCode是否相等 —— 一定相等
hashCode相等的两个对象,equals是否相等 —— 不一定相等

4、Java中实现一个类的两个对象的大小比较的两种方式(内部排序 外部排序)

内部排序:Comparable

若一个类实现了Comparable接口,表示该类具备天然的可比较特性
int compareTo(Object o)

  • 返回 0 表示量对象相等
  • 返回大于0 表示当期对象大于目标对象
  • 返回小于0 表示当前对象小于目标对象

外部排序:Comparator
类本身不具备天然的可比较特性,专门有一个类来比较其大小关系——比较器实现 Comparator
int compare (Object o1, Object o2);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值