Java第15章学习总结

第15章 泛型与集合框架

泛型的主要目的是可以建立具有类型安全的集合框架。

    15.1.1泛型类声明

    可以使用“ class名称<泛型列表>”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如

    class People<E>

    People是泛型类的名称,E是其中的泛型,也就是说,并没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据。也可以不用E表示泛型,使用任何一个合理的标识符都可以,但最好和我们熟悉的类型名称有所区别。泛型类声明时,“泛型列表”给出的泛型可以作为类的成员变量的类型、方法的类型以及局部变量的类型。

   15.1.2使用泛型类声明对象

    和普通的类相比,泛型类声明和创建对象时,类名后多了一对“”,而且必须要用具体的类型替换“◇”中的泛型。例如:

    Cone<circle> coneone;

coneone =new Cone<circle>(new Circle());

 

 

    15.2链表

    如果需要处理一些类型相同的数据,人们习惯使用数组这种数据结构数组在使用之前必须定义其元素的个数,即数组的大小,而且不能轻易改变数组的大小,因为改变数组大小就意味着放弃原有的全部单元,这是无法容忍的。有时可能给数组分配了太多的单元而浪费了宝贵的内存资源,糟糕的一方面是,程序运行时需要处理的数据可能多于数组的单元。当需要动态地减少或增加数据项时,可以使用链表这种数据结构。

链表是由若干个称作结点的对象组成的一种数据结构,每个结点含有一个数据和下一个结点的引用,或含有一个数据并含有上一个结点的引用和下一个结点的引用。

    15.2.1 Linkedlist<E>泛型类

java.util包中的 Linkedlist<E>泛型类创建的对象以链表结构存储数据,习惯上称kedlist类创建的对象为链表对象。例如:

 Linkedlist<String> mylist=new Linkedlist<string>();

创建一个空双链表。

使用 LinkedList<E>泛型类声明创建链表时,必须要指定E的具体类型,然后链表就可以使用add(E obj)方法向链表依次增加结点。

 15.2.2常用方法

 Linkedlist<E>是实现了泛型接口L的泛型类,而泛型接口List<E>又是 Collect<E>型接口的子接口,LinkedList<E>泛型类中的绝大部分方法都是泛塑接口方法的实现,编程时,可以使用接口回技术,即把LinkedList<E>对象的引用赋值给Collection<E>接口变量成List<E>接口变量,接口就可以调用类实现的接口方法。

 以下是 Linkedlist<E>泛型类实现List<E>泛型接口中的一些常用方法

    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<E>泛型类本身新增加的一些常用方法

    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。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值