Collections.singletonList使用方法

简介: 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


相关文章
|
6月前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
3月前
|
测试技术 API 数据处理
|
5月前
|
Java
JavaSE——集合框架二(1/6)-前置知识-可变参数、Collections工具类
JavaSE——集合框架二(1/6)-前置知识-可变参数、Collections工具类
29 0
|
6月前
Collection和Collections区别
Collection和Collections区别
120 0
|
存储 安全 Java
每日一道面试题之Collection 和 Collections 有什么区别?
每日一道面试题之Collection 和 Collections 有什么区别?
|
定位技术
Collections.singletonMap()用法
Collections.singletonMap()用法
115 0
|
安全 Java 索引
collections类
collections类
|
Java 索引
【Java】collections类操作用法
【Java】collections类操作用法
101 0
|
安全 Java
Java集合(8)--集合工具类Collections
Java集合(8)--集合工具类Collections
104 0
Java集合(8)--集合工具类Collections
|
Java 开发者
Collections 工具类|学习笔记
快速学习 Collections 工具类
Collections 工具类|学习笔记