博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Collections.singletonList使用方法
阅读量:3958 次
发布时间:2019-05-24

本文共 2771 字,大约阅读时间需要 9 分钟。

方法注释

/**     * Returns an immutable list containing only the specified object.     * The returned list is serializable.     *     * @param  
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
extends AbstractList
implements RandomAccess, Serializable { private static final long serialVersionUID = 3093736618740652951L; private final E element; SingletonList(E obj) {element = obj;} public Iterator
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
action) { action.accept(element); } @Override public boolean removeIf(Predicate
filter) { throw new UnsupportedOperationException(); } @Override public void replaceAll(UnaryOperator
operator) { throw new UnsupportedOperationException(); } @Override public void sort(Comparator
c) { } @Override public Spliterator
spliterator() { return singletonSpliterator(element); } }
//普通写法    List
beans= MyService.getInstance().queryBean(param); if (CollectionUtils.isEmpty(beans)) { beans= new ArrayList<>(); MyBean bean= new MyBean(param); beans.add(bean); }
//优化写法    List
beans= MyService.getInstance().queryBean(param); if (CollectionUtils.isEmpty(beans)) { MyBean bean= new MyBean(param); beans= Collections.singletonList(bean); }

其他特殊容器类

public static 
Set
singleton(T o);public static
List
singletonList(T o);public static
Map
singletonMap(K key, V value); // 或者直接调用常量 EMPTY_LISTpublic static final
List
emptyList();//或者直接调用常量 EMPTY_MAPpublic static final
Map
emptyMap();//或者直接调用常量 EMPTY_SETpublic static final
Set
emptySet()
  • 需要注意的是,以上6个方法返回的容器类均是immutable,即只读的,如果调用修改接口,将会抛出UnsupportedOperationException

转载自 ()

 

你可能感兴趣的文章
J2EE监听器Listener接口大全[转]
查看>>
cookie、session、sessionid 与jsessionid[转]
查看>>
常见Oracle HINT的用法
查看>>
JAVA中各类CACHE机制实现的比较 [转]
查看>>
PL/SQL Developer技巧
查看>>
3-python之PyCharm如何新建项目
查看>>
15-python之while循环嵌套应用场景
查看>>
17-python之for循环
查看>>
18-python之while循环,for循环与else的配合
查看>>
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>
P4-c++函数详解-04函数重载,函数模板和函数模板重载,编译器选择使用哪个函数版本?
查看>>
P5-c++内存模型和名称空间-01头文件相关
查看>>
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>
P9-c++对象和类-02构造函数和析构函数总结
查看>>
P10-c++对象和类-03this指针详细介绍,详细的例子演示
查看>>