本文共 2771 字,大约阅读时间需要 9 分钟。
/** * Returns an immutable list containing only the specified object. * The returned list is serializable. * * @paramthe 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 SingletonListextends 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); } }
//普通写法 Listbeans= MyService.getInstance().queryBean(param); if (CollectionUtils.isEmpty(beans)) { beans= new ArrayList<>(); MyBean bean= new MyBean(param); beans.add(bean); }
//优化写法 Listbeans= MyService.getInstance().queryBean(param); if (CollectionUtils.isEmpty(beans)) { MyBean bean= new MyBean(param); beans= Collections.singletonList(bean); }
public staticSet 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()
转载自 ()