• Collections(一)


    方法注释

     /**
         * Returns an immutable list containing only the specified object.
         * The returned list is serializable.
         *
         * @param  <T> the class of the objects in the list
         * @param o the sole object to be stored in the returned list.
         * @return an immutable list containing only the specified object.
         * @since 1.3
         */

    应用

    这个方法主要用于只有一个元素的优化,减少内存分配,无需分配额外的内存,可以从SingletonList内部类看得出来,由于只有一个element,因此可以做到内存分配最小化,相比之下ArrayList的DEFAULT_CAPACITY=10个。

    //SingletonList类的源码
        private static class SingletonList<E>
            extends AbstractList<E>
            implements RandomAccess, Serializable {
    
            private static final long serialVersionUID = 3093736618740652951L;
    
            private final E element;
    
            SingletonList(E obj)                {element = obj;}
    
            public Iterator<E> iterator() {
                return singletonIterator(element);
            }
    
            public int size()                   {return 1;}
    
            public boolean contains(Object obj) {return eq(obj, element);}
    
            public E get(int index) {
                if (index != 0)
                  throw new IndexOutOfBoundsException("Index: "+index+", Size: 1");
                return element;
            }
    
            // Override default methods for Collection
            @Override
            public void forEach(Consumer<? super E> action) {
                action.accept(element);
            }
            @Override
            public boolean removeIf(Predicate<? super E> filter) {
                throw new UnsupportedOperationException();
            }
            @Override
            public void replaceAll(UnaryOperator<E> operator) {
                throw new UnsupportedOperationException();
            }
            @Override
            public void sort(Comparator<? super E> c) {
            }
            @Override
            public Spliterator<E> spliterator() {
                return singletonSpliterator(element);
            }
        }
    //普通写法
        List<MyBean> beans= MyService.getInstance().queryBean(param);
        if (CollectionUtils.isEmpty(beans)) {
          beans= new ArrayList<>();
          MyBean bean= new MyBean(param);
          beans.add(bean);
        }
    //优化写法
        List<MyBean> beans= MyService.getInstance().queryBean(param);
        if (CollectionUtils.isEmpty(beans)) {
          MyBean bean= new MyBean(param);
          beans= Collections.singletonList(bean);
        }

    其他特殊容器类

    public static <T> Set<T> singleton(T o);
    
    public static <T> List<T> singletonList(T o);
    
    public static <K,V> Map<K,V> singletonMap(K key, V value);
     
    // 或者直接调用常量 EMPTY_LIST
    public static final <T> List<T> emptyList();
    
    //或者直接调用常量 EMPTY_MAP
    public static final <K,V> Map<K,V> emptyMap();
    
    //或者直接调用常量 EMPTY_SET
    public static final <T> Set<T> emptySet()
    • 需要注意的是,以上6个方法返回的容器类均是immutable,即只读的,如果调用修改接口,将会抛出UnsupportedOperationException
  • 相关阅读:
    关于keil编译cortexm3纯汇编时为什么问题使用align地址问题
    skyeye的安装过程与helloworld的执行
    vim写程序常用技巧
    ramdisk与 initrd、initramfs的关系
    BL指令实际做出的操作
    cortexm3中存储器的访问属性中的共享属性
    cortem3中的pc值的问题
    关于一个操作系统实现中bochs的安装
    2021,2,9 学习总结
    2021.2.14 学习总结
  • 原文地址:https://www.cnblogs.com/cuiqq/p/12084947.html
Copyright © 2020-2023  润新知