• 作业08-集合


    1. 本周学习总结

    以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

    2. 书面作业

    1. ArrayList代码分析

    1.1 解释ArrayList的contains源代码

    contain方法是用来判断该数组中是否有相应元素,而实现这个方法需要调用indexOf()方法,而这个方法通过图中的代码可以知道,如果其中存在该元素就返回其下标值(肯定大于等于0),不存在就返回-1。

    1.2 解释E remove(int index)源代码

    remove方法执行起始先调用了rangeCheck方法,该方法当传入的下标值大于要进行操作的动态数组的长度时,抛出报错信息IndexOutOfBoundsException,否则继续执行remove方法的下一段代码。numMoved用于记录需要左移的元素的个数,其中左移时使用的是System.arraycopy方法。

    1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?

    不需要。结合1.1与1.2可以看出,它们的存放元素类型都是Object类(超级父类),又因为Object类是所有类的父类,ArrayList存储数据时不需要考虑元素的具体类型。

    1.4 分析add源代码,回答当内部数组容量不够时,怎么办?



    ensureCapacityInternal()方法进行判断数组是否需要扩容,当判断需要进行扩容的时候,就调用ensureExplicitCapacity()方法来实现数组的扩容,扩容后,用Arrays.copyOf()方法将数组元素复制到新的数组中。

    1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?

    rangeCheck方法是系统内部用于判断传入的下标参数是否超过了数组的长度,由此决定是否抛出IndexOutOfBoundsException的报错信息,该方法执行的内容只用于其他方法执行时所依赖的判断条件之一,使用者无需知道也无需调用该方法,所以应修饰为private。

    2. HashSet原理

    2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?

    在将元素添加到HashSet(散列集)时,一开始会调用hashCode方法,计算相应的哈希值,进而找到相应的存储位置,如果这个位置上面没有元素,那好,就将其添加进去,如果已经有元素了,那么这个时候我们就要调用equals()方法,进行比较,若相同,不予以添加,若不同,就将其添加到链表尾部。

    2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)

    应是O(1)。将元素放入HashSet中,一般只要直接调用一次hashCode方法便可以直接得到该元素的存放位置,不需要进行多次计算。

    3. ArrayListIntegerStack

    题集jmu-Java-05-集合之ArrayListIntegerStack

    3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)

    不同点:很明显二者的存储类型不一样,前者为数组,后者为动态数组。因此,入栈时,使用数组的就要判断是否栈满的情况,但是使用动态数组(自动扩容)的就少了这个操作,显得更加简洁。

    3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。

    我们知道接口里面定义了需要的方法名称,并没有具体的方法实现。而当我们需要定义一个类并继承了这个接口,具体化其中的方法,还有就是当我们需要创建一个新的类时,但是具体方法要不一样,这个时候就直接实现接口,很方便。

    4. Stack and Queue

    4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。

    4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?

    本题使用了LinkedList实现类,LinkedList是采用链表的形式实现的,适合队列的出队入队操作,而以数组形式实现的实现类更加适合于随机访问。

    5. 统计文字中的单词数量并按单词的字母顺序排序后输出

    题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)

    5.1 实验总结

    这个题主要就是使用TreeSet的排序功能然后将单词按字母顺序排序后输出。还有就是要求判断是否大于10,还有一个foreach语句遍历输出。

    3.码云及PTA

    题目集:jmu-Java-05-集合

    3.1. 码云代码提交记录

    在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
    

    3.2 截图PTA题集完成情况图

    需要有两张图(1. 排名图。2.PTA提交列表图)

    3.3 统计本周完成的代码量

    需要将每周的代码统计情况融合到一张表中。

    行数 新增行数 文件数 新增文件数
    0 0 0 0
    762 762 16 16
    762 0 16 0
    1295 533 23 7
    1752 473 29 5
    2061 309 34 5
    2641 580 38 4
  • 相关阅读:
    [Linux] Nginx服务下统计网站的QPS
    [Go] go等待读取最后一行的数据内容
    [Go] Golang中的面向对象
    [Linux] 常见的并发模型
    [PHP] pmap可以查看进程占用内存的详细情况
    [PHP] 解决php中上传大文件的错误
    [PHP] 循环查看php-fpm的内存占用情况
    [Go] go中的goto语句跳到指定标签
    Java抽象类(Abstract Class)与接口(Interface)区别
    Java访问级别修饰符
  • 原文地址:https://www.cnblogs.com/dengss/p/7819644.html
Copyright © 2020-2023  润新知