1.集合添加元素的首选方式:
Collections.addAll(collection,T...);
collection.addAll()成员方法只能接受另一个Collectino对象作为参数,因此它不如Arrays.asList()或Collections.addAll,这两个方法使用的都是可变参数列表。
2.当使用Arrays.asList时返回的时大小固定的list,所以不能使用add或者addAll.
当多重继承,Arrays.asList()返回的类型是父类,如果是双重继承,编译器会报错,Collections.addAll不得
class Snow {}
class Powder extends Snow {}
class Light extends Powder {}
class Heavy extends Powder {}
class Crusty extends Snow {}
class Slush extends Snow {}
public class AsListInference {
public static void main(String[] args) {
List<Snow> snow1 = Arrays.asList(
new Crusty(), new Slush(), new Powder());
// Won’t compile:
// List<Snow> snow2 = Arrays.asList(
// new Light(), new Heavy());
// Compiler says:
// found : java.util.List<Powder>
// required: java.util.List<Snow>
// Collections.addAll() doesn’t get confused:
List<Snow> snow3 = new ArrayList<Snow>();
Collections.addAll(snow3, new Light(), new Heavy());
Array 输出更输入顺序一样,Hash无序但是很快,TreeSet有小到大,LinkedHashSet按照插入排序
3.迭代器统一了对容器的访问方式
List有更加强大的ListIterator,可以previous()双向移动,还可以替换用set(),可以产生一个指向某一个Index的ListIterator(n);
4.linkedList可以用来作为stack,queue or a double-ended queue
getFirst()和element()一样的,返回头不remove,如果为空throw nosuchelementexception
peek()小些不一样的是,返回头部,如果不存在则不抛异常,返回null
removeFirst()和remove()一样的,返回头并且删除,如果为空抛出异常
poll()也是返回并且删除第一个,但是没有会返回null
addFirst()在顶部添加一个元素
offer()和add()和addLast()一样,在末尾添加一个元素
removeLast()移除并返回
5.queue和priorityqueue 队列和优先队列
6.实现iterable接口可以使用foreach语法
如果要使用for each反向遍历或者其他的
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; }
public T next() { return get(current--); }
public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}
};
}
}
7.总结,java保存对象:数组(array)需定义类型长度,不能resize;Collection保存单一元素,可修改长度,自动装拆箱