泛型
1.ArrayList<Apple> apples = new ArrayList();
通过使用类型参数(可以由多个,泛型),可以在编译期防止将错误类型的对象放入容器。 编译器错误 or 运行期错误
Collection
- Collection: List, Set, Queue, Map;都是Interface。
- List: ArrayList 和 LinkedList。LinkedList相比于ArrayList优点是在列表中间的插入和删除都相对低廉,但随即访问方面效率更差。
- Iterator(迭代器):遍历并选择序列中的对象 Interface;提供三个方法:hasNext(),next(),remove()。Java的Iterator只能单向移动;使用iterator()方法要求容器返回一个Iterator,Iterator将准备好返回序列的第一个元素;next()方法获得序列中的下一个元素;hasNext()方法检查序列中是否还有元素;remove()将迭代器新近返回的元素删除,在调用remove()方法前先调用next()方法。
- ListIterator可以双向移动,listIterator(n)可以产生一个一开始指向列表索引为n的元素处的ListIterator。
- LinkedList:LinkedList还添加了可以使其用作栈、队列或双端队列的方法。
- Stack:栈,后进先出。LinkedList具有能够直接实现栈的所有功能的方法;
- Set:不保存重复的元素的特性使查找就成了Set最重要的操作,因此通常会选择实现一个HashSet。HashSet无顺序,LinkedHashSet使用链表来维护元素的插入顺序;TreeSet使用红黑树数据结构存储元素。
- 检查Java的Random类的随机性代码:
//: com/wo142857/hoding/Statistics.java
// Simple demonstration of Random.
import java.util.*;
public class Statistics {
public static void main(String[] args) {
Random rand = new Random(47);
Map<Integer, Integer> m = new HashMap<Integer, Integer>();
for(int i = 0; i < 10000; i++) {
// Produce a number between 0 and 20;
int r = rand.nextInt(20);
Integer freq = m.get(r);
m.put(r, freq == null ? 1 : freq + 1);
}
System.out.println(m);
}
}
9.containsKey() 和 containsValue() 方法,查看一个Map是否包含某个键或某个值。keySet() 和 values() 返回Map中所有key组成的Set,或所有Value的Collection。
10.两种特殊方法
public static Map<Person, List<? extends Pet>> PetPeople = new HashMap<Person, List<? extends Pet>>();
static {
PetPeople.put(new People("Liu"), ArrayList.asList(new Dog("Moer"), new Cat("Jingle")));
}
11.数组一旦生成,其容量就不能改变。像数组一样,List也建立数字索引与对象的关联,因此数组和List都是排好序的容器。但是List能自动扩容。
12.HashMap设计用来快速访问;而TreeMap保持“键”始终处于排序状态,所以没有HashMap快;LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问能力。
13.Set不接受重复元素。HashSet提供最快的查询速度;TreeSet保持元素处于排序状态;LinkedHashSet以插入顺序保存元素。