美文网首页
提示三十六

提示三十六

作者: 飞絮搅青冥 | 来源:发表于2022-07-25 22:39 被阅读0次

提示三十六:使用 EnumSet 替代位属性。

EnumSet继承了AbstractSet并且实现了Cloneable,Serializable的接口,以前我都没有用过。它的性能与位域相当,所以遇到枚举集合时使用EnumSet性能会比较优秀。

public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>
    implements Cloneable, java.io.Serializable

书中有这样一段话“批量操作(如 removeAll 和 retainAll )是使用按位算术实现的,就像你手动操作位域一样“,我发现removeAll我还比较熟悉,但是retainAll之前也接触的比较少。于是我就随手写了一个test:

List<String> strings1 = Arrays.asList("hello", "world", "a");
        List<String> strings2 = Arrays.asList("hello", "world", "two");
        System.out.println(strings2.retainAll(strings1));
        System.out.println(strings1);
        System.out.println(strings2);

没想到居然报错了,java.lang.UnsupportedOperationException。发现是不能在循环中修改list,但是retainAll的源码分明是在循环中使用了Iterator去做的remove,而且retainAll这个方法既然能够被API提供出来,怎么连我这么简单的调用都会有问题。后面我试了一下,发现new一个ArrayList,然后用add一个个加元素进去就可以调用retainAll这个方法,原来问题出在了Arrays.asList上。后来我仔细看了一下才发现虽然这里的asList看上去就是new了一个ArrayList,但是这个类是Arrays里面内部实现的一个ArrayList,而不是我们一般使用的java.util包里面的ArrayList类。看来以后遇到这种方法需要多加小心,不能想当然。

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
Arrays内部实现ArrayList类

相关文章

  • 提示三十六

    提示三十六:使用 EnumSet 替代位属性。 EnumSet继承了AbstractSet并且实现了Cloneab...

  • 提示36

    今天学习有关务实的内容,先看提示: 提示三十六:你无法写出完美的软件。 作者开头就抛出了提示的内容,没有人写出过完...

  • 致三十六岁还未婚的我们

    致三十六岁还未婚的我们 三十六岁,还没结婚,亲友,尤其是父母兄弟姐妹焦灼的、小心的关心和提示也日渐稀少,我也不似往...

  • 我为亲爱的肝脏代言-36

    【哪些表现提示肝脏细胞损伤】 每日一更(2020.12.27,第三十六期) 第七个表现:手指甲/脚趾甲有竖纹或者横...

  • 绕口令

    三十六,三十六,年年三十六,日日三十六,若无三十六,何以生? 八十一,八十一,九九八十一,年年八十一,日日八十一,...

  • 枕诗入梦--第五十七首情诗

    “枕诗入梦”第三十六期: 温馨提示:若打不开朗诵文件,可点击右上角使用浏览器打开收听。亦可直接下载“荔枝”FM,订...

  • 挺经

    根据APP的提示,看完《挺经》这本书,只花了三十六分钟。第一次知道,原来我看书也可以这么快。 在慢慢读完《曾国藩日...

  • 兵法策略《三十六计》用英语怎么说?

    《三十六计》或称三十六策,是指中国古代三十六个兵法策略,古人学好三十六计,常用于带兵打仗,三十六计不仅是中国古代军...

  • 2018-12-20

    三十六计 《三十六计》原书,至今无准确年代和作者可考。《三十六计》中的多数...

  • 兵法古籍

    三十六计 《三十六计》或称“三十六策”,是指中国古代三十六个兵法策略,语源于南北朝,成书于明清。 古代卓越的军事思...

网友评论

      本文标题:提示三十六

      本文链接:https://www.haomeiwen.com/subject/lsunirtx.html