• 20172325 2018-2019-2 《Java程序设计》第四周学习总结


    20172325 2018-2019-2 《Java程序设计》第四周学习总结

    教材学习内容总结

    《Java软件结构与数据结构》第六章-列表

    一、概述

    • 1、列表是什么?

    列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行组织。就像栈和队列一样,列表也可以使用链表或数组来实现。
    需要注意的一点是:列表集合没有内在的容量大小。

    • 2、列表集合的类型

    (1)有序列表(order list),其元素按照元素的某种内在特性进行排序。

    (2)无序列表(unordered list),其元素间不具有内在顺序,元素按照它们在列表中的位置进行排序。

    (3)索引列表(indexed list),其元素可以用数字索引来引用。

    • 3、有序列表

    (1)有序列表中的元素具有内在关联,这种关联定义了元素之间的顺序。

    (2)只有Comparable对象才能储存在有序列表中。

    (3)用数组实现有序列表:
    基于数组的列表实现能把列表的一端固定在索引0处,并可以按需要平移元素。

    删除操作:

    @Override
        public T remove(T element)
        {
            T result;
            int index = find(element);
    
            if (index == NOT_FOUND)
                throw new ElementNotFoundException("ArrayList");
    
            result = list[index];
            rear--;
    
            // shift the appropriate elements
            for (int scan=index; scan < rear; scan++)
                list[scan] = list[scan+1];
    
            list[rear] = null;
            modCount++;
    
            return result;
        }
    

    contains操作:

    @Override
        public boolean contains(T target)
        {
            return (find(target) != NOT_FOUND);
        }
    
        public void expandCapacity(){
            T[] larger = (T[]) new Object[list.length*2];
            for (int scan = 0;scan<rear;scan++){
                larger[scan]=list[0];
    
            }
           list=larger;
    
    
        }
    

    add操作:

    public void add(T element)
        {
            if (!(element instanceof Comparable))
                throw new NonComparableElementException("OrderedList");
    
            Comparable<T> comparableElement = (Comparable<T>)element;
    
            if (size() == list.length)
                expandCapacity();
    
            int scan = 0;
    
            // find the insertion location
            while (scan < rear && comparableElement.compareTo(list[scan]) > 0)
                scan++;
    
            // shift existing elements up one
            for (int shift=rear; shift > scan; shift--)
                list[shift] = list[shift-1];
    
            // insert element
            list[scan] = element;
            rear++;
            modCount++;
        }
    
    • 4、无序列表

    (1)无序列表中的元素按使用者所选择的任意方式排序。
    (2)用数组实现:

    addafter操作:

    @Override
        public void addAfter(T element, T target)
        {
            if (size() == list.length)
                expandCapacity();
    
            int scan = 0;
    
            // find the insertion point
            while (scan < rear && !target.equals(list[scan]))
                scan++;
    
            if (scan == rear)
                throw new ElementNotFoundException("UnorderedList");
    
            scan++;
    
            // shift elements up one
            for (int shift=rear; shift > scan; shift--)
                list[shift] = list[shift-1];
    
            // insert element
            list[scan] = element;
            rear++;
            modCount++;
        }
    
    • 5、索引列表

    (1)索引列表为它的元素维护一段连续的数字索引值。

    (2)索引列表和数组的根本区别在于:索引列表的索引值总是连续的。如果删除一个元素,其他元素的位置会像“坍塌”了一样以消除产生的间隙,当插入一个元素时,其他元素的索引将进行位移以腾出位置。

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

    • 问题1:数组实现的ArrayList和使用链表实现的LinkedList在空间复杂度和时间复杂度上有什么区别?

    • 问题1解决方案:链表实现需要更多的空间。LinkedList类实际上是一个双向链表,因此其引用需要两倍的空间。ArrayList类在空间管理上比基于数组的实现方式更高效。这是因为,ArrayList集合是可变大小的,因此按所需动态分配空间。所以,无需一次申请大量的空间而造成浪费。列表是在需要时才增加空间。两者间最大的区别发生在访问列表中特定索引位置时。如果已知索引值,ArrayList实现能够在相同的时间内访问列表中的任意元素。

    • 问题2:教材提到ProgramOfStudy和Course类实现了Serializable接口,对于Serializable接口不太了解。

    • 问题2解决方案:是一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化;
      Serializable主要用来支持两种主要的特性:
      1、Java的RMI(remote method invocation),RMI允许像在本机上一样操作远程机器上的对象,当发送消息给远程对象时,就需要用到序列化机制来发送参数和接受返回值
      2、Java的JavaBean,Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被保存下来,以便当程序运行时能恢复这些状态信息,这也需要序Serializable机制

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

    • 问题1:做使用数组完成列表时,在测试时出现了这种问题,猜测是Last操作size操作有问题。

    • 问题1解决方案:后来通过单步调试发现了问题出在了last和size的方法上。后来我就单步调试看看错在了哪,发现在last中最开始是
      T result = list[rear]
      但是书中写到了rear表示的是列表中的元素数目,以及把元素添加到列表末端时的下一个可用位置,通过单步调试可知list[rear]为null,还有size(),最开始我用的是别的变量,但是发现它在其他操作中还需要对该变量进行调整,所以后来想到了rear这个量。

    代码托管

    由于IDEA除了问题,上学期的代码全部错误,导致不能运行,所以将上学期代码全部删除,码云中有备份,可以随时查看。

    (statistics.sh脚本的运行结果截图)

    上周考试错题总结

    暂未改错,10月14日前改错完毕。

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:

      • 问题和解决过程记录详细
      • 按时按量完成高质量的博客记录
    • 代码中值得学习的或问题:

      • 多尝试多摸索
      • 在遇到错误时首先想到查阅资料解决问题,而不是轻易放弃
      • 装换思路尝试新的方式会有意想不到的收获
    • 参考示例

    其他(感悟、思考等,可选)

    由于国庆假期没有利用好时间精力,导致耽误了学习任务,很是对不起自己和老师的期望,希望通过改变和调整,能够利用好以后的时间精力,一定按时按量完成给自己规定的学习任务,不给自己的错误找借口才是前进的最大突破,继续加油。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 20/20
    第二周 941/8481 1/2 18/20
    第三周 653/9134 1/3 22/20
    第四周 1728/4385 2/5 8/28

    参考资料

  • 相关阅读:
    Windows系统下hosts文件工作原理
    windows2008中IIS7详细安装图文教程加fastcgi模式PHP配置教程
    C#中的global关键字
    Winform自定义控件实例
    PHP的线程安全与非线程安全版本的区别
    Visual Studio的编程环境配置
    C#Winform导出Excel
    分页
    存储过程使用相关知识
    Winform主窗体转移到新窗体
  • 原文地址:https://www.cnblogs.com/20172325DYK/p/9751590.html
Copyright © 2020-2023  润新知