20175322 周弋鸿 2018-2019-2 《Java程序设计》第八周学习总结
教材学习内容总结
泛型类
- 泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建立具有类型安全的集合框架
- 可以使用“class 名称”声明一个泛型类,泛型列表中可以是任何接口或对象,但不能是基本数据类型
- 泛型类声明和创建对象时,类名后多了一对“<>”,而且必须要用具体的类型替换“<>”中的泛型
- 泛型类中的泛型变量bottom只能调用Object类中的方法
使用泛型类建立的数据结构时,不必进行强制类型转换,在运行时不要求进行类型检查,使代码更安全
链表
- 链表是由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节点的引用
- 在java中使用LinkedList泛型类来创建以链表结构存储数据的对象
- 链表使用add方法等常用方法对进行操作结点
- 结点是自动链接在一起的
- 链表对象可以使用iterator()方法获取一个Iterator对象,该对象就是针对当前链表的迭代器
- java也提供了顺序结构的动态数组表类ArrayList,数组表不适合动态地改变它存储的数据,但数组表获得第n个单元中的数据的速度要比链表获得第n个单元中的数据快
而通过Collection类我们还可以将链表中的数据重新随机排列以及旋转
LinkedList泛型类
- LinkedList泛型类创建的对象以链表结构存储数据,习惯上称LinkedList类创建的对象为链表对象
- 常用方法:
LinkedList<E>
泛型类实现Lis<E>
泛型接口中的一些常用方法:
public boolean add(E element) //向链表末尾添加一个新的节点,该节点中的数据是参数elememt指定的数据。 public void add(int index ,E element)// 向链表的指定位置添加一个新的节点,该节点中的数据是参数elememt指定的数据。 public void clear()// 删除链表的所有节点,使当前链表成为空链表。 public E remove(int index) //删除指定位置上的节点。 public boolean remove(E element)// 删除首次出现含有数据elemen的节点。 public E get(int index) //得到链表中指定位置处节点中的数据。
LinkedList<E>
泛型类本身新增加的一些常用方法:
public void addFirst(E element) //向链表的头添加新节点,该节点中的数据是参数elememt指定的数据。 public void addLast(E element)// 向链表的末尾添加新节点,该节点中的数据是参数elememt指定的数据。 public E getFirst() //得到链表中第一个节点中的数据。 public E getLast() //得到链表中最后一个节点中的数据。 public E removeFirst() //删除第一个节点,并返回这个节点中的数据。
洗牌与旋转
- Collections类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法:
public static void shuffle(List<E> list)// 将list中的数据按洗牌算法重新随机排列。
static void rotate(List<E> list, int distance) //旋转链表中的数据。
public static void reverse(List<E> list) //翻转list中的数据。
堆栈
- 堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作
- 使用Stack泛型类创建一个堆栈对象
- 使用push、pop、empty、peek、search等方法对栈进行操作或查看栈的状态
tack<E>//泛型类创建一个堆栈对象,堆栈对象常用方法 public E push(E item);//实现压栈操作 public E pop();//实现弹栈操作 public boolean empty();//判断堆栈是否还有数据 public E peek();//获取堆栈顶端的数据,但不删除该数据 public int search(Object data);//获取数据在堆栈中的位置
散列映射
- HashMap<K,V>对象采用散列表这种数据结构存储数据,习惯上称HashMap<K,V>对象为散列映射
- 可以使用put、clear、clone等方法对散列进行操作
- 将values方法返回一个实现Colletion接口类创建的对象,可以使用接口回调技术,即将该对象的引用赋值给Collection接口变量,该接口变量可以回调iterator()方法获取一个Itertaor对象,这个Iterator对象存放散列映射中所有键/值对中的值
- 常用方法:
public void clear()// 清空散列映射
public Object clone()// 返回当前散列映射的一个克隆
public boolean containsKey(Object key)// 如果散列映射有“键/值”对使用了参数指定的键,方法返回true,否则返回false
public boolean containsValue(Object value)// 如果散列映射有“键/值”对的值是参数指定的值
public V get(Object key)// 返回散列映射中使用key做键的“键/值”对中的值
public boolean isEmpty() //如果散列映射不含任何“键/值”对,方法返回true,否则返回false
public V remove(Object key)// 删除散列映射中键为参数指定的“键/值”对,并返回键对应的值
public int size() //返回散列映射的大小,即散列映射中“键/值”对的数目
树集
- TreeSet类创建的对象称作树集
- 在树集中,同一层中的结点从左到右按:大小顺序递增,从上到下递增
- 在插入树集的结点前要在创建对象的类中实现Comparable接口
树映射是一种特殊的树,树映射的结点存储关键字/值对
自动装箱与拆箱
- 自动装箱:程序允许把一个基本数据类型添加到类似链表等数据结构中,系统会自动完成基本类型到相应对象的转换
- 自动拆箱:即自动装箱逆过程
教材学习中的问题和解决过程
- 本周学习Java过程中未遇到较大问题
代码调试中的问题和解决过程
- 问题1:编译程序时显示使用了不安全的操作。
- 问题1解决方案:书上已经说明这是由于JDK1.5后的编译器会在使用旧版本的LinkedList类时给出警告信息,忽略该信息直接运行即可。使用
javac -Xlint:unchecked Example15_4.java
命令对代码进行编译
代码托管
感悟
- 第十五章内容偏少,但其中的内容十分重要,尤其是链表、散列映射以及树集等
- 我们需要多结合之前学过的知识来加深对这章内容的理解