20165322 第十周课下补做

第十周课下补做

课程知识点总结

  • 在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法:

    • Comparable:“可比较的”,(欲参与比较的对象对应的元素类需实现Comparable接口)

      使用这种策略来比较时,两个对象(这里两个对象是指一个类的两个不同实例)本身必须是“可比较的”,比较的标准由对象所在的类来定义,这种可比较的能力是对象本身固有的,因此不需要第三方参与就可以完成比较。要使得两个对象本身是可比较的,那么对象所在的类必须实现Comparable接口才可以,调用Collection.sort(List)。其compareTo()方法只要一个参数,因为这里只有“你”“我”的关系,没有第三方。

      比如,两个人要比较身高,分辨高矮是人类固有的能力,两个人只要站到一起就能分出谁高谁矮。

    • Comparator:“比较器”

      使用这种策略来比较时,如何进行比较和两个对象本身无关,而是由第三者(即比较器)来完成的。第三方比较器类需要另外专门设计:只要实现Comparator接口,任何一个类(对象)都可能成为一个“比较器”,但比较器并不是比较自己的实例,而是比较其它类的两个不同对象,比较器在这里充当“仲裁者”的角色,这也就是为什么compare()方法需要两个参数,调用Collection.sort(List, Compatator)

      比如,两个人要比较谁智商更高,靠他们自身无法进行,这时要借助一个比较器(比如,智商测试题)。

  • 泛型类声明:

    class 名称<泛型列表>

  • 创建链表

    LinkedList<String> mylist=new LinkedList<String>();

  • 向链表增加节点

    list.add(E obj);

  • 从链表中删除节点

    list.remove(index)

  • 升序排序

    public static sort(List<E>list)

  • 折半查找list是否含有和参数key一样的元素

    int binarySearch(List<T>,Tkey,compareTo<T>c)

    ## 习题补做

    排序

  • 代码链接
  • 实验结果截图

单链表

第十五章教材代码分析

  • Example15_1
  • 初步接触、了解泛型。知道泛型类声明和创建对象时要用具体类型来替换“<>”中的泛型

    Cone<Circle> coneOne; coneOne = new Cone<Circle>(new

  • 泛型中的泛型变量bottom只能调用Object类中的方法

第十五章课后编程题

(1)使用堆栈结构输出an的若干项,其中an=2an-1+2an-2,a1=3,a2=8

  • 代码:
import java.util.*;
    public class T1 {
        public static void main(String[] args) {
            Stack<Integer> stack=new Stack<Integer>();
            stack.push(new Integer(3));
            stack.push(new Integer(8));
            int k=1;
            while (k<=10) {
                for (int i=1;i<=2;i++) {
                    Integer F1=stack.pop();
                    int f1=F1.intValue();
                    Integer F2=stack.pop();
                    int f2=F2.intValue();
                    Integer temp= 2 * f1 + 2 * f2;
                    System.out.println(""+temp.toString());
                    stack.push(temp);
                    stack.push(F2);
                    k++;
                }
            }
        }
    }
  • 运行结果截图:

(2)将链表中的学生英语成绩单存放到一个树集中,使得按成绩自动排序,并输出排序结果

  • 代码:
import java.util.*;
class CollegeStu implements Comparable {
    int english=0;
    String name;
    CollegeStu(int english,String name) {
        this.name=name;
        this.english=english;
    }
    @Override
    public int compareTo(Object b) {
        CollegeStu stu=(CollegeStu)b;
        return (this.english-stu.english);
    }
}
public class T2 {
    public static void main(String[] args) {
        List<CollegeStu> list=new LinkedList<CollegeStu>();
        int score []={ 90, 88, 80};
        String name []={"张三","李四","王五"};
        for (int i=0;i<score.length;i++) {
            list.add(new CollegeStu(score[i],name[i]));
        }
        Iterator<CollegeStu> iter=list.iterator();
        TreeSet<CollegeStu> mytree=new TreeSet<CollegeStu>();
        while (iter.hasNext()) {
            CollegeStu stu=iter.next();
            mytree.add(stu);
        }
        Iterator<CollegeStu> te=mytree.iterator();
        while (te.hasNext()) {
            CollegeStu stu=te.next();
            System.out.println(""+stu.name+" "+stu.english);
        }
    }
}
  • 运行结果截图:

(3)有10个U盘,有两个重要的属性:价格和容量,编写一个应用程序,使用TreeMap

  • 代码:
import java.util.*;
class UDiscKey implements Comparable {
    double key=0;
    UDiscKey(double d) {
        key=d;
    }
    @Override
    public int compareTo(Object b) {
        UDiscKey disc=(UDiscKey)b;
        if((this.key-disc.key)==0) {
            return -1;
        }
        else {
            return (int) ((this.key - disc.key) * 1000);
        }
    }
}
class UDisc{
    int amount;
    double price;
    UDisc(int m,double e) {
        amount=m;
        price=e;
    }
}
public class T3 {
    public static void main(String args[ ]) {
        TreeMap<UDiscKey,UDisc>  treemap= new TreeMap<UDiscKey,UDisc>();
        int amount[]={8,16,32,64};
        double price[]={40,50,64,128};
        UDisc UDisc[]=new UDisc[4];
        for(int k=0;k<UDisc.length;k++) {
            UDisc[k]=new UDisc(amount[k],price[k]);
        }
        UDiscKey key[]=new UDiscKey[4] ;
        for(int k=0;k<key.length;k++) {
            key[k]=new UDiscKey(UDisc[k].amount);
        }
        for(int k=0;k<UDisc.length;k++) {
            treemap.put(key[k],UDisc[k]);
        }
        int number=treemap.size();
        Collection<UDisc> collection=treemap.values();
        Iterator<UDisc> iter=collection.iterator();
        while(iter.hasNext()) {
            UDisc disc=iter.next();
            System.out.println(""+disc.amount+"G "+disc.price+"元");
        }
        treemap.clear();
        for(int k=0;k<key.length;k++) {
            key[k]=new UDiscKey(UDisc[k].price);
        }
        for(int k=0;k<UDisc.length;k++) {
            treemap.put(key[k],UDisc[k]);
        }
        number=treemap.size();
        collection=treemap.values();
        iter=collection.iterator();
        while(iter.hasNext()) {
            UDisc disc=iter.next();
            System.out.println(""+disc.amount+"G "+disc.price+"元");
        }
    }
}
  • 运行结果截图:

原文地址:https://www.cnblogs.com/wangyaojia/p/8998311.html

时间: 2024-10-11 23:06:07

20165322 第十周课下补做的相关文章

20165235 第十周课下补做

20165235 祁瑛 第十周课下补做 相关知识点的总结 LinkedList<String> mylist=new LinkedList<String>()来创建一个链表. mylist.add();来添加结点. get(int index)来获取链表中第index个位置的结点的对象. public static sort(List<E>)将链表中的元素升序排列 public static binarySearch(List<T>,T key,Compar

20165308 2017-2018-2 第十周课下补做

20165308 2017-2018-2 第十周课下补做 一.教材十五章代码分析 代码分析有的是以注释的形式写出,对整个代码的理解是写在前面的 1.p442-443 Example15_1.java Cone.java 此类不关心怎么样计算面积,计算面积由后面的类完成,只需调用即可,只关心计算体积. public class Cone<E> { double height; E bottom; //用泛型类E声明对象bottom public Cone(E b) { //参数b是泛型类型 bo

第十周课下补做

20165339第十周课上测试补做 一.相关知识点 创建链表:LinkedList<String> mylist=new LinkedList<String>(); 增加节点:list.add(E obj) 删除节点:list.remove(index) 遍历链表:(迭代器)链表对象用iterator()方法获得一个Iterator对象.用get(int index)方法返回列表中的第index个对象. 排序:public static sort(List<E> lis

20165337岳源第十周课上补做

课上补做-2 要求:针对下面的Student类,使用Comparator编程完成以下功能: 在测试类StudentTest中新建学生列表,包括自己和学号前后各两名学生,共5名学生,给出运行结果(排序前,排序后) 对这5名同学分别用学号和总成绩进行增序排序,提交两个Comparator的代码 课下提交代码到码云 import java.util.Comparator; public class IDComparator implements Comparator { @Override publi

第三周课下补做 20165216

一:相关知识点 1:关于Scanner的运用 (在使用前 使用  import java.util.*:使用 Scanner XXX =new Scanner(System.in)表示读取输入) 2:相关语言语法 对于阶乘的程序可用一个表示阶乘的函数来求和 sum=sum+fact(x); 3:关于断点的调试 熟悉进入main(1)调试,调整行数进行断点调试,可用List观察断点位置 二:课上内容补做内容截图 1: 循环与递归 2:JDB调试 三:第二章编程题 原文地址:https://www.

20165320 第八周课下补做

知识点总结: 一.加载JDBC-数据库驱动. try{ Class. forName("com.mysql.jdbc.Driver"); } catch(Exception e){} 二.连接数据库 Connection con; String uri = "jdbc:mysql://192.168.100.1:3309/name?user=root&password=&useSSL=true"; try{ con = DriverManager.g

第十周课下作业

第十周课下作业(补做课堂测试) 一.知识点总结 1.单链表 创建单链表 链表中数据的插入list.add("**"); 链表中数据的排序Collections.sort(); 链表中数据的删除lsit.remove(""); 2.排序 树集概念 树映射 TreeMap<K,V>**适合用于数据的排序** 通过关键字进行排序TreeMap<StudentKey,Student> treemap= new TreeMap<StudentKe

20165315 第四次考试课下补做

20165315 第四次考试课下补做 一.相关知识点的总结 泛型 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构 泛型类声明 可以使用class 名称<泛型列表>声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据 使用泛型类声明对象 泛型类声明和创建对象时,类名后多了一对"<>",而且必须要用具体的类型替换"<>"中的泛型 链表

20165315 第二次考试课下补做

20165315 第二次考试课下补做 课上内容的补做,结果截图 参考http://www.cnblogs.com/rocedu/p/6766748.html 编程实现1!+2!+3!+... + N!的功能,N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值, 提交运行结果的截图(至少五张),注意测试正常,异常,边界情况, 比如java SumofRecur -8,java SumofRecur 0,java Sumo