下面的代码主要调用工具类的2个常用函数,singletonList和emptyList
String[] init = { "One", "Two", "Three", "One", "Two", "Three" };
List list = new ArrayList<String>(Arrays.asList(init));
System.out.println(list);
list.add("eee");
System.out.println(list);
list = Collections.singletonList("one");
System.out.println(list);
// list.add("eee");
// System.out.println("end");
list = Collections.emptyList();
list.add("eee");
System.out.println(list);
他们返回的list是不可变的。singletonList只有一个元素而且是final
private static class SingletonList<E>
extends AbstractList<E>
implements RandomAccess, Serializable {
static final long serialVersionUID = 3093736618740652951L;
private final E element;
SingletonList(E obj) {element = obj;}
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;
}
}
对于emptyList
public static final List EMPTY_LIST = new EmptyList();
就是创建了一个final的空list。至于实现看下面的代码:
private static class EmptyList
extends AbstractList<Object>
implements RandomAccess, Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 8842843931221139166L;
public int size() {return 0;}
public boolean contains(Object obj) {return false;}
public Object get(int index) {
throw new IndexOutOfBoundsException("Index: "+index);
}
// Preserves singleton property
private Object readResolve() {
return EMPTY_LIST;
}
}原文地址:http://blog.csdn.net/u010278923/article/details/44853983