(Map集合只能靠以另一个Map对象为参数的构造方法添加一组元素)
public class AddingGroups {
public static void main(String[] args) {
//静态方法asList
Collection<Integer> c =
new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Integer[] moreInts = { 6, 7, 8, 9, 10 };
//成员方法addAll
c.addAll(Arrays.asList(moreInts));
//静态方法addAll
Collections.addAll(c, 11, 12, 13, 14, 15);
Collections.addAll(c, moreInts);
// Produces a list "backed by" an array:
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
list.set(1, 99); // OK -- modify an element
// list.add(21); // Runtime error because the
// underlying array cannot be resized.
}
} ///:~
class Animal {}
class Cat extends Animal {}
class Bosimao extends Cat {}
class Jiafeimao extends Cat {}
class Dog extends Animal {}
class Pig extends Animal {}
public class AsListInference {
public static void main(String[] args) {
List<Animal> a1 = Arrays.asList(
new Dog(), new Pig(), new Cat());
// Won't compile:
//asList返回的是List<Cat>
// List<Animal> a2 = Arrays.asList(
// new Bosimao(), new Jiafeimao());
// Compiler says:
// found : java.util.List<Cat>
// required: java.util.List<Animal>
// Collections.addAll() doesn't get confused:
//用静态方法addAll不会有上面的问题
List<Animal> a3 = new ArrayList<Animal>();
Collections.addAll(a3, new Bosimao(), new Jiafeimao());
// Give a hint using an
// explicit type argument specification:
//在asList上加泛型
List<Animal> a4 = Arrays.<Animal>asList(
new Bosimao(), new Jiafeimao());
}
} ///:~
代码:
class ReversibleArrayList<T> extends ArrayList<T> {
public ReversibleArrayList(Collection<T> c) { super(c); }
public Iterable<T> reversed() {
//匿名内部类
return new Iterable<T>() {
public Iterator<T> iterator() {
//匿名内部类
return new Iterator<T>() {
//反向迭代的逻辑
int current = size() - 1;//最后元素的索引
public boolean hasNext() { return current > -1; }
//size和get方法是本类继承自ArrayList的
//所以返回的迭代器对象是和原对象一对一联结的
public T next() { return get(current--); }
public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}
};
}
}
public class AdapterMethodIdiom {
public static void main(String[] args) {
ReversibleArrayList<String> ral =
new ReversibleArrayList<String>(
Arrays.asList("To be or not to be".split(" ")));
//正常遍历
for(String s : ral)
System.out.print(s + " ");
System.out.println();
//反向遍历
for(String s : ral.reversed())
System.out.print(s + " ");
}
}
15
标记接口:
java.util.RandomAccess
附着到了ArrayList上, 没有附着到LinkedList上