Java 泛型
from the book 'Thinking in java 4th'.
容器类
Java容器类的用途是保存对象,并将其划分为两个不同的概念:
1,collection。一个独立元素的序列。
2,Map。一组成对的键值对对象,允许你使用键来查找值。
如下图所示为Java的容器简图(这里只包含了在一般情况下会碰到的接口和类),基本类型包括Map,List,Set和Queue。
Java提供了大量持有对象的方法:
1,数组将数字和对象联系起来。它保存明确的对象,查询对象时,不需要对结果做类型转换。
数组一旦生成,其容量不能改变。
2,Collection保存单一的元素,而Map保存相关联的键值对。Collection和Map都可以自动调整尺寸。
3,像数组一样,List也建立数字索引与对象的关联,因此数组和List都是排好序的容器。
4,如果要进行大量的随机访问,就使用ArrayList,如果要经常从表中间插入和删除元素,就使
用LinkedList.
5,各种Queue以及栈的行为,有LinkedList提供。
6,Map是一种将对象与对象相关联的涉及。HashMap设计用来快速访问,而TreeMap保持键始终处
于排序状态。LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问能力。
7,Set不接受重复元素。HashSet提供了最快速的查询速度,而TreeSet保持元素处于排序状态。
LinkedHashSet以插入顺序保持元素。
8,新程序不应该使用Vector,HashTable和Stack。
泛型转型
class Fruit {}
class Apple extends Fruit {}
class Orange extends Fruit {}
A,数组,支持向上转型
Fruit[] fruit = new Fruit[10];
fruit[0] = new Fruit();
fruit[1] = new Apple();
fruit[2] = new Orange();
B,列表,不支持
//List<Fruit> fls = ol; //Error
//List<Fruit> fls = new ArrayList<Orange>(); //Error
C,通配符
List<? extends Fruit> fln = new ArrayList<Orange>(); // ok
List<? extends Fruit> fl = ol; //ok
collection方法
如下是collection中包含的方法,可以用在List和Set中,
boolean add(T) 增加参数为T的参数
boolean addAll(collection<? extends T>) 增加T泛型的参数
void clear() 清除
Boolean containsAll(collection<?>) 如果容器持有此参数的所有元素,返回真
boolean isEmpty() 为空则返回真
Iterator<T> iterator 返回一个Iterator<T>的迭代器
boolean remove(Object) 移除实例
boolean removeAll(collection<?>) 移除参数的所有元素
Boolean retainAll(collection<?>) 保存参数有的元素
int size() 返回容器中的数目
Object[] toArray() 返回一个数组
<T> T[] toArray(T[] a) 返回一个数组,该数组包含容器中的所有元素