相关知识点总结:
1.LinkedList泛型类创建一个链表对象
LinkedList<String> mylist = new LinkedList<String>();
2.向链表中依次添加结点
mylist.add();
3.链表的遍历
LinkedList类中的get(int index)方法将返回当前链表中第index个结点中的对象
链表对象可以使用iterator()方法获取一个Iterator对象,该对象是针对当前链表的迭代器。
4.排序与查找
public static sort(List<E>list)
该方法可将list中的元素按升序排列
int binarySearch(List<T>list,T key,CompareTo<T> c)
使用折半查找list是否含有和参数key相等的元素
还可以通过Comparable接口规定对象的大小比较
链表相关的概念
单链表:每个结点含有一个数据和下一个结点的引用
双链表:每个结点含有一个数据和下一个结点的引用以及上一个结点的引用
Collections类可以通过调用sort方法来进行排序
课上内容补做截图:
一、
- 在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法:
- 有类的源代码,针对某一成员变量排序,让类实现Comparable接口,调用Collection.sort(List)
- 没有类的源代码,或者多种排序,新建一个类,实现Comparator接口 调用Collection.sort(List, Compatator)
运行截图:
二、补充MyList.java的内容,提交运行结果截图(全屏)
错因:一开始实用链表的Linked相关方法进行操作,之后才发现需要运用Node进行结点的相关操作
运行截图:
书上代码分析:
15.1:声明一个泛型类Cone,计算体积的时候只关心它的底能否计算面积,和底的具体形状没有关系,所以求体积时用泛型做底,而且泛型变量只能调用从object类继承或重写的方法,例子中的底面积需要用tostring()方法。
15.2:该例子是为了比较get(int index)方法与iterator()方法遍历链表所需要的时间。因为LinkedList的存储结构不是顺序结构,所以链表调用get(int index)方法所要的时间长,所以需要用迭代器。
15.3:这个例子是使用老版本JDK的LinkedList,创建一个新链表,添加元素进行遍历,一个是使用get index,一个是使用迭代器。
15.4:例子4是通过Comparable接口规定的大小关系来进行对链表的排序,最后再用Collections类调用sort方法排序。该程序中在 compareTo方法里返回的是height的大小比较,所以链表中的对象是按照height的大小来决定对象之间的大小关系。
15.5:该例子就是使用了Collections类中的洗牌算法还有旋转算法对链表进行洗牌还有旋转,再分别将它们遍历输出看变化。
15.6:该例子是使用堆栈输出一个递归序列,算法是后一项等于前两项的和,也就是Fibonacci数列。 重要的操作就是
压栈和弹栈:
push 压栈
pop 弹栈
15.7:该例子是一个英语单词查询的GUI程序,用户在界面的一个文本框中输入一个英文单词,另一个文本框显示单词的翻译
15.8:该例子首先是创建了一个树集,在树集里面增添了四个元素,而树集和链表不一样,添加的时候它就按照对象的大小进行添加的。
90 赵一
66 钱二
86 孙三
76 李四
15.9:该例子是使用TreeMap分别按学生的英语成绩和数学成绩排序结点,不仅存储了数据,还存储了与其相关联的关键字(即数学和英语)。
15.10:该例子实现了自动装箱与自动拆箱的功能。
程序允许把一个基本数据类型添加到类似链表等数据结构中,系统会自动完成基本类型到相应对象的转换,获取时系统自动完成对象到基本类型的转换。
书上编程题目:
1.使用堆栈结构输出an的若干项,其中an=2an-2,a1=3,a2=8。
解法:按照15.7的例题修改栈一开始的两个元素,再修改temp的计算方法就行
2.编写一个程序,将链表中的学生英语成绩单存放到一个树集中,使得按成绩自动排序,并输出排序结果。
解法:按照15.8的例题,用两个迭代器,一个链表的,一个是树集的,分别将链表中的Student对象添加到树集中,再通过树集的迭代器挨个打印出来
3.有10个U盘,有两个重要属性:价格和容量。编写一个应用程序,使用TreeMap<K,V>类,分别按照价格和容量排序输出10个U盘的详细信息。
解法:按照15.9的例题,将英语和数学修改成U盘的容量和价格就行了