zoukankan      html  css  js  c++  java
  • Collections.singletonList方法的使用(转载)

    方法注释

        /**
         * 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

    https://www.cnblogs.com/oreo/p/9761940.html

  • 相关阅读:
    【IIS错误】IIS各种错误
    【IIS错误
    【C#】C#操作Excel文件(转)
    【C#】语音识别
    【IIS错误】未能加载文件或程序集“AAAAA”或它的某一个依赖项。试图加载格式不正确的程序。
    【Web前端】清除css、javascript及背景图在浏览器中的缓存
    【模态窗口-Modeldialog】提交请求时禁止在新窗口打开页面的处理方法
    第八周学习进度表
    梦断代码阅读笔记01
    第二阶段冲刺第七天
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/14212968.html
Copyright © 2011-2022 走看看