第15章 泛型与集合框架
泛型的主要目的是可以建立具有类型安全的集合框架。
15.1.1泛型类声明
可以使用“ class名称<泛型列表>”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如
class People
People是泛型类的名称,E是其中的泛型,也就是说,并没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据。也可以不用E表示泛型,使用任何一个合理的标识符都可以,但最好和我们熟悉的类型名称有所区别。泛型类声明时,“泛型列表”给出的泛型可以作为类的成员变量的类型、方法的类型以及局部变量的类型。
15.1.2使用泛型类声明对象
和普通的类相比,泛型类声明和创建对象时,类名后多了一对“”,而且必须要用具体的类型替换“◇”中的泛型。例如:
Cone
coneone =new Cone
15.2链表
如果需要处理一些类型相同的数据,人们习惯使用数组这种数据结构数组在使用之前必须定义其元素的个数,即数组的大小,而且不能轻易改变数组的大小,因为改变数组大小就意味着放弃原有的全部单元,这是无法容忍的。有时可能给数组分配了太多的单元而浪费了宝贵的内存资源,糟糕的一方面是,程序运行时需要处理的数据可能多于数组的单元。当需要动态地减少或增加数据项时,可以使用链表这种数据结构。
链表是由若干个称作结点的对象组成的一种数据结构,每个结点含有一个数据和下一个结点的引用,或含有一个数据并含有上一个结点的引用和下一个结点的引用。
15.2.1 Linkedlist
java.util包中的 Linkedlist
Linkedlist
创建一个空双链表。
使用 LinkedList
15.2.2常用方法
Linkedlist
以下是 Linkedlist
public boolean add( e elemet)向链表末尾添加一个新的结点,该结点中的数据是参数element指定的数据
public void add(int index, E element)向链表的指定位置添加一个新的结点,该结点中的数据是参数 element指定的数据
public void clear()删除链表的所有结点,使当前链表成为空表
public E remove( (int index)删除指定位置上的结点
public boolean remove( E element)删除首次出现含有数据element的点
public E get( int index)得到链表中指定位置处结点中的数据
public int indexOf( E element)返回含有数据 demon的结点在链表中首次出现的位置如果链表中无此结点则返-1
public int lastIndexOf(E element)返回含有数据 的结点在链表中最后出现的位置,如果链表中无此结点则返回-1
public E set(int index E element)将当前表ind位置结点中的数据替换为参数element指定的数据,并返回被替换的数据
public int size()返回链表的长度,即结点的个数
public boolean contains(Object element判断链表中是否有结点含有数据element
以下是 LinkedList
public void addFirst(E element)向链表的头添加新结点,该结点中的数据是参数
public void addLast(E element)向链表的末尾添加新结点,该结点中的数据是参数 element指定的数据
public E getFirst() 得到链表中第一个结点中的数据 elemet指定的数据,
public E getLast()得到链表中最后一个结点中的数据
public E removeFirst() 删除第一个结点,并返回这个结点中的数据
public Object clone()得到当前链表的一个克隆链表,该克隆表中结点数据的改变不会影响到当前链表中结点的数据,反之亦然。
public E removeLast()删除最后一个结点,并返回这个结点中的数据
15.3堆栈
堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作,堆线把第一个放入该堆线的数据放在最底下,而把后续放入的数据放已有数据的顶上,向堆线中输入数据的操作称为“压”,从堆栈中输出数的操作称为“弹栈”。由于堆栈总是在顶端进行数据的输入输出操作,所以栈总是输出(删除)最后压入堆线中的数据,这就是“后进先出”的来历。
堆栈是很灵活的数据结构,使用堆栈可以节省内存的开销,比如,递归是一种很消存的算法,可以借助堆栈消除大部分递归,达到和递归算法同样的目的, Fibonacci整数是我们熟悉的一个递归序列,它的第n项是前两项的和,第一项和第二项是1。