zoukankan      html  css  js  c++  java
  • 20172311《程序设计与数据结构》第五周学习总结

    20172311《程序设计与数据结构》第五周学习总结

    教材学习内容总结

    第九章 排序与查找

    一丶查找

    • 查找的方法主要包括线性查找法和二分查找法
    • 查找是这样一个过程,即在某个项目组中寻找某一指定目标元素,或者确定该指定目标并不存在
    • 二分查找的复杂度是对数级的,这使得他对于大型查找池非常有效率
    • 为了能查找某一对象,我们必须能够将一个对象跟另一个对象进行比较。因此,所涉及的元素实现了Comparable接口且彼此是可比较的
    • Java程序的main方法必须用static修饰符来声明。这样,解释器不用实例化含有main的类的对象,就可以调用main方法
    • 静态方法不是作用于具体的对象中,因而不能引用实例变量,只可以引用静态变量
    • 要创建一个泛型方法,只需要在方法头的返回类型前插入一个泛型声明即可,且泛型声明必须位于返回类型之前
    public static <T extends Comparable<T>>boolean
          linearSearch(T[] data,int min,int max,T target)
    

    二丶排序

    • 排序是这样一个过程,即基于某一标准,将某一组项目按照某个规定顺序排列
    • 基于效率排序算法通常也分为两类 :顺序排序和对数排序,其中顺序排序包括选择排序、插入排序和冒泡排序,对数排序包括快速排序法和归并排序法
    • 基数排序并不是基于排序关键字来比较排序项,而是基于排序关键字的结构。对于排序关键字中每个数字/字符的每种可能取值,都会创建一个单独的队列。队列的数目就称为基数

    教材学习中的问题和解决过程

    • 问题:创建泛型方法与创建一个引用泛型参数的类有何区别?

    • 问题解决方案:

    泛型类

    泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map
    一个最普通的泛型类:

    //此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
    //在实例化泛型类时,必须指定T的具体类型
    public class Generic<T>{ 
        //key这个成员变量的类型为T,T的类型由外部指定  
        private T key;
    
        public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
            this.key = key;
        }
    
        public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
            return key;
        }
    }  
    //泛型的类型参数只能是类类型(包括自定义类),不能是简单类型
    //传入的实参类型需与泛型的类型参数类型相同,即为Integer.
    Generic<Integer> genericInteger = new Generic<Integer>(123456);
    
    //传入的实参类型需与泛型的类型参数类型相同,即为String.
    Generic<String> genericString = new Generic<String>("key_vlaue");
    Log.d("泛型测试","key is " + genericInteger.getKey());
    Log.d("泛型测试","key is " + genericString.getKey());  
    

    注意

    • 泛型的类型参数只能是类类型,不能是简单类型

    泛型方法

    在java中,泛型类的定义非常简单,但是泛型方法就比较复杂了。

    尤其是我们见到的大多数泛型类中的成员方法也都使用了泛型,有的甚至泛型类中也包含着泛型方法,这样在初学者中非常容易将泛型方法理解错了。

    泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。

    /*
     泛型方法的基本介绍
     传入的泛型实参
     return T 返回值为T类型
     说明:
       1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
       2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
       3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
       4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
     */
    public <T> T genericMethod(Class<T> tClass)throws InstantiationException ,
      IllegalAccessException{
            T instance = tClass.newInstance();
            return instance;
    }  
    

    代码调试中的问题和解决过程

    • 问题:使用线性查找法对Contact类对象进行查找时出现错误,查找数组中已有对象返回false

    • 问题解决方案:

    线性查找法代码

    //线性查找法
        public static <T> boolean linearSearch(T[] data, int min, int max, T target)
        {
            int index = min;
            boolean found = false;
    
            while (!found && index <= max)
            {
                found = data[index].equals(target);
                index++;
            }
            return found;
        }  
    

    通过与结对伙伴讨论得知.equals方法是Object类里的方法,对Object类对象能够正常使用,但是对自己创建的类不能正常使用,Contact类就是自己写的类,判断是否相等必须自己再写一个判断是否相等的方法来实现。

    自己写的判断Contact对象是否相等的方法的代码 、

     public boolean equal(Contact other){
            if (lastName.equals(other.lastName)&&firstName.equals(other.firstName)&&phone.equals(other.phone))
                return true;
            else 
                return false;
        }  
    

    代码托管

    上周考试错题总结

    上周无错题!!!

    结对及互评

    • 本周结对学习情况
      本周主要对查找和排序方法进行了较为深入的学习,我跟我的结对小伙伴对诸多问题进行了较为深入的讨论,并最终使得问题得以解决,通过结对学习较大提高了学习的效率,还是非常的开心的!

    感想

    本周的主要学习内容是对查找和排序方法的实现的学习,有一个较深的感触就是理解算法与实现算法还是有较大距离的,在算法的实现过程中总会出现各种各样的bug,需要耐下心来通过调试解决问题!本周收获还是挺多的,继续努力吧!!!

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 4/4
    第二周 464/464 1/2 10/14 理解掌握了用数组和链表实现栈的方法
    第三周 494/958 1/3 10/24 理解掌握了用数组和链表实现队列的方法
    第四周 1629/2587 2/5 20/44 对用链表和数组实现列表进行了学习
    第五周 856/3443 2/6 15/59 较为深入的学习了查找和排序方法的实现
    • 计划学习时间:20小时

    • 实际学习时间:15小时

    • 改进情况:提高学习的效率,保证学习的质量,遇到难题不要慌,耐下心来解决问题!!!

    参考资料

  • 相关阅读:
    treeview 递归
    循环递归遍历XML文档或按某要求遍历XML文档
    SQL Server、IIS和 ASP.NET安全配置
    C# USING 语句块
    C# 基础语法
    不安装oracle 客户端连接oracle DDTeck连接语法
    Java中堆和栈的区别
    C# 采用OLDB方式连接EXCEL
    EXCEL 列宽
    C# 问号用法
  • 原文地址:https://www.cnblogs.com/zhaoxiaohai/p/9805807.html
Copyright © 2011-2022 走看看