Java类集(—)

  1. ArrayList , Vector , LinkedList关系与区别?
    a. ArrayList , Vector , LinkedList都属于List接口常用子类,其中ArrayList , Vector基于数组实现,LinkedList基于链表实现。
    b. ArrayList采用懒加载策略,在构造方法阶段不初始化对象数组,在添加元素时才初始化对象数组(默认为10),扩容为原先数组的1.5倍,采用异步处理,线程不安全,性能较高。
    在频繁查找以及尾部的插入与删除场景下使用ArrayList。
    c. Vector当产生对象时就初始化内部数组(默认为10),扩容为原先数组2倍,采用synchronized同步方法,线程安全,性能很低(读读互斥)。
    d. LinkedList采用异步处理,线程不安全。
    频繁在任意位置进行元素插入与删除使用LinkedList。

  2. jcf中fail-fast?fail-safe
    什么是快速失败策略?
    优先考虑出现异常的情况,当异常产生时,抛出异常,程序终止。
    ConcurrentModificationException发生在Collection集合使用迭代器遍历时,使用了集合类提供的修改集合内容方法报错。而如果使用Iterator迭代器的remove()不会出现此错误。

final void checkForComodification() {
    if (modCount != expectedModCount)
        throw new ConcurrentModificationException();
}

modCount记录当前集合修改(结构化修改,增加或删除)的次数。
expectedModCount记录获取集合迭代器时当前集合的修改次数。
ConcurrentModificationException作用:避免多线程场景下的数据脏读问题。
fail-fast如何解决?
a. 遍历不要修改集合内容
b. 使用迭代器内部的删除方法
c. 使用fail-safe集合
fail-fast集合:java.util除了TreeMap以外的所有集合
fail-safe集合:juc包的集合(ConcurrentHashMap,CopyOnWriteArrayList)

  1. Set与Map的关系?
    Set就是value值相同的Map集合,现有Map再有Set,Set不允许数据重复。

  2. hashCode与equals的关系
    hashCode返回相等,equals不一定相等
    equals返回相等,hashCode一定相等,如果不相等,说明同一元素重复存储,浪费空间。

  3. Java中实现一个类的两个对象大小比较的方式(内部排序,外部排序)
    java.util.Comparable接口(内部比较器):
    若一个类实现了Comparable接口,就意味着该类支持排序,存放该类的Collection或数组,可以直接通过Collections.sort()或Array.sort进行排序。
    实现了Comparable接口的类可以直接存放在TreeSet或TreeMap中。
    public int compareTo (T o)
    返回值三种情况:
    返回正数:表示当前对象大于目标对象
    返回0:表示当前对象等于目标对象
    返回负数:表示当前对象小于目标对象
    Comparator(外部排序接口)
    若要自定义某个自定义类的顺序,而该类本身不支持排序(类本身没有实现Comparable)。我们可以建立一个该类的‘比较器’来进行排序,比较器实现Comparator即可。
    ‘比较器’:实现了Comparator接口的类作为比较器,通过该比较器来进行类的排序。
    int compare(T o1, T o2);
    返回值与compareTo返回值完全一样
    实现了Comparator接口进行第三方排序–策略模式,此方法更加灵活,可以轻松改变策略进行第三方的排序算法。
    Comparable接口与Comparator接口的关系:
    Comparable是排序接口,若一个类实现了Comparable接口,意味着该类支持排序,是一个内部比较器(自己去和别人比)。
    Comparator接口是比较器接口,类本身不支持排序,专门有若干个第三方的比较器(实现了Comparato接口的类)来进行类的排序,是一个外部比较器(策略模式)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值