Java 泛型

来源:互联网 发布:决战萨斯城 知乎 编辑:程序博客网 时间:2024/05/22 13:46

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>(); //ErrorC,通配符List<? extends Fruit> fln = new ArrayList<Orange>(); // okList<? 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)  返回一个数组,该数组包含容器中的所有元素
0 0
原创粉丝点击