又看了java思想的第四版得第11章,记一下关键点留个纪念,呵呵。通俗易懂的就不写了。
按照章节和知识点写的。
这一章也是了解容器常用的知识点。
1.使用容器的原因
写程序之前不知道需要多少个对象。
2.基本概念
Collection 一个独立元素的序列,有list,set(元素不重复),queue
ArrayList和LinkedList都是区别是array是随机访问速度快,但是插入移除慢,linked相反,且有栈,队列的方法。
HashSet,TreeSet,LinkedHashSet
HashMap,TreeMap,LinkedHashMap都是Hash快,tree按升序排,LinkedHash有hash速度,且按插入顺序。
Map 一组成对的键值对。
3.添加一组元素
主要是Arrays.asList和Collections.addAll()
Collection<Integer> collection =
new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Integer[] moreInts = { 6, 7, 8, 9, 10 };
collection.addAll(Arrays.asList(moreInts));
// Runs significantly faster, but you can't
// construct a Collection this way:
Collections.addAll(collection, 11, 12, 13, 14, 15);
Collections.addAll(collection, 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.
Arrays.asList()返回的是一个底层是数组的List,所以企图改变它的大小 如add,remove都会报错。
这两个方法的差别
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());
// Give a hint using an
// explicit type argument specification:
List<Snow> snow4 = Arrays.<Snow>asList (
new Light(), new Heavy());
}
} ///:~
需要注意蓝色字体和红色区别,Arrays.asList()里的只能是父类的一级子类即power类型。进一步说明collections.addAll的灵活性。
4.容器打印
Arrays.toString()打印数组,容器则直接打印。
5.迭代器
Iterator是个容器都会返回的单向遍历器。所以统一了对容器的访问方式。
和foreach遍历区别是 不需要关心底层容器结构及其元素数量,可修改容器中元素。
ListIterator只能用于list,可双向遍历,且可以一开始就从n元素开始。listIterator(n)。
6.set介绍
treeset之外的set和collection有一样的借口,没有多余功能,只是行为不同,通常作为查找某个元素的是否在set中存在(归属性)。
treeset存在红黑树中。
7.队列queue
普通的queue可以用linkedlist实现。
Priorityqueue在java se5中已有,按照优先级弹出,不是先进先出。
各种队列和栈都是由linkedlist支持的。
8.treemap保持键的排序。