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


相关文章
|
存储 Java 计算机视觉
Java代码居然可以做出如此高级的图片编辑系统
Java代码居然可以做出如此高级的图片编辑系统
530 0
|
XML Java Apache
Gradle安装与配置
Gradle安装与配置
Gradle安装与配置
|
PHP Windows 编解码
windows命令行方式下打印和设置PATH变量
点击开始菜单,运行=》cmd打印当前变量:echo %PATH%结果:C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;d:\PROGRA~1\ssh;D:\Program Files\tortoisesvn\bin;D:\Program...
2673 0
|
8月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
2489 11
|
11月前
|
Java
【编程基础知识】switch case可以用string(千万注意要加上break)
本文详细探讨了Java中`switch`语句使用字符串时的注意事项,重点讲解了`break`语句的重要性。通过代码示例和流程图,帮助读者正确理解和使用`switch`语句,避免常见的编程错误。
580 4
|
11月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
2007 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
JSON Java 测试技术
一篇文章讲明白JGit学习
一篇文章讲明白JGit学习
510 0
|
运维 Kubernetes jenkins
测试流程--测试发版规范
为了保证系统稳定性,对软件项目的上线过程进行规范,确保项目符合产品需求。对于已经开发完毕的系统,需要正式部署到生产环境前必须严格按照以下流程规范实施。 规范发版的流程,指定发版的相关输出,相关信息的收集,并通知相关业务方了解发版信息。防止或减少因发版造成的系统抖动对业务产生的影 响,并有利于追溯发版过程,方便后续优化迭代。
1999 0
测试流程--测试发版规范
|
Web App开发 JSON iOS开发
抖音 根据视频id获取视频详情接口分析
抖音 根据视频id获取视频详情接口分析
1786 0
抖音 根据视频id获取视频详情接口分析
|
前端开发 Java 应用服务中间件
Spring Boot 学习研究笔记(三) -Spring Boot 项目文件说明
Spring Boot 学习研究笔记(三) -Spring Boot 项目文件说明
216 0