• java第8次作业


    1. 本周学习总结

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

    2. 书面作业

    1. ArrayList代码分析

    1.1 解释ArrayList的contains源代码

    ArrayList的contains方法是比较是否包含某元素,contains的源代码(源代码如下)调用了indexOf()方法,返回indexOf(o) >= 0

    • indexOf()方法的执行内容:遍历该ArrayList,找到与o参数相等的元素则返回该元素的位置,如果找不到就返回-1;
    • contain(Object o)方法:其返回了indexOf(o) >= 0,如果indexOf(Object o)的返回值大于等于0返回true,如果为-1返回false。
    1.2 解释E remove(int index)源代码

    源代码如下,E remove(int index)一开始首先调用了rangeCheck(int index)方法,判断该位置是否超出范围,超出就抛出异常。如果未超出就,int numMoved = size - index - 1;为被删除元素后面的元素个数,如果个数大于0,就将index位置后的元素全部往前移动一位,然后用elementData[--size] = null;将数组大小减一,将最后一个位置置为null。

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

    不需要考虑元素的具体类型,因为ArrayList的数组数据类型是Object类型,所以说明所有类型都能用。

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

    当容量不够时,add会将数组的容量+1,使数组容量足够使。

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

    rangeCheck(int index)(源代码如下)方法是,判断指定位置index是否超出size的大小,如果超出,则抛出IndexOutOfBoundsException异常。用户不需要知道rangeCheck方法如何实现,只需要知道结果就行,所以声明为private。

    2. HashSet原理

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

    HashSet内部使用一个HashMap保存数据。其中add方法中使用Map.put方法来将元素加入内部的map中,put方法使用hash方法来确定元素保存位置。

    public boolean add(E e) {
            return map.put(e, PRESENT)==null;
        }
    
    public V put(K key, V value) {
        return putVal(hash(key), key, value, false, true);
    }
    
    2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)

    不是,添加元素的时候不需要遍历,HashSet只需要通过位置就可以把元素进行添加,所以O(1)。

    3. ArrayListIntegerStack

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

    3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
    • 相同之处
      IntegerStack接口:
      interface IntegerStack {
      public Integer push(Integer item);
      public Integer pop();
      public Integer peek();
      public boolean empty();
      public int size();
      }
    • 不同之处:ArrayListIntegerStack内部实现用ArrayList列表,ArrayIntegerStack内部实现用Array数组。重写各种方法时,用数组进行实现的时候经常需要考虑是否越界的问题,用列表的时候就不用,省了很多事。
    3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。

    好处:例如此题用到了接口IntegerStack,我们可以写一个类去实现这个接口里的方法,这个类可以是用列表实现的(如题jmu-Java-05-集合之ArrayListIntegerStack),也可以是数组实现的(如题jmu-Java-04-面向对象2-进阶-多态、接口与内部类),当我们写好main函数之后,因为我们利用了接口IntegerStack接口,所以我们改变了输入的数据类型后(比如从列表改为数组),main函数不需要修改,这就是接口的好处。

    4. Stack and Queue

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


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

    答:Queue接口用的LinkedList(链表)实现类。
    银行业务模拟有两个主要部分:

    • 1、编号为奇数的“顾客”存入到A队列,为偶数的“顾客”存入B队列。
    • 2、按A队列出两个,B队列出一个的规则输出队列的元素(代码如下),注意末尾不能留空格,除了下方代码之外,还要记得多加两个循环,输出A队和B队内的元素,确保A队和B队中的元素都输尽了,同样也要注意空格的问题。

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

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

    5.1 实验总结

    这题主要是利用TreeSet可以对加入其中元素进行排序的特点,对英语单词进行排序。此外要注意题目要求,题目要求是只输出前十个的单词。按照题目要求可先用语句Set<String> set = new TreeSet<String>();建立一个TreeSet,然后用set.add()把键入的文本输入到set中,最后按照字母排序从set中输出前十个单词就行了。

    3.码云及PTA

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

    3.1. 码云代码提交记录

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

    3.2 截图PTA题集完成情况图

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

    3.3 统计本周完成的代码量

    周次 总行数 新增行数 总文件数 新增文件数
    1 115 115 17 17
    2 421 306 24 7
    3 698 277 30 6
    5 1085 387 38 8
    6 1497 412 48 10
    7 2033 536 57 9
    8 2265 232 60 3
    9 2787 522 65 5
  • 相关阅读:
    Forms身份验证
    常见的js图片或内轮换效果
    模仿select选择框
    基于jquery的js幻灯片类
    js弹出幕布遮罩层
    css那些事
    选择珠宝js业务逻辑源码
    aspnet帐号密码改了会出问题
    用rails做了个书评排行网站,欢迎光临!
    转发:为什么函数式编程至关重要
  • 原文地址:https://www.cnblogs.com/yellower/p/7816814.html
Copyright © 2020-2023  润新知