Java第九周的作业

1.本周学习总结

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

  • 思维导图

2.书面作业

2.1 ArrayList代码分析

2.1.1解释ArrayList的contains的源代码

  • ArrayList中的contains源代码为

  • 其中indexOf()方法的作用是看看是否存在输入的元素,如果存在就返回下标,不存在就返回-1;
  • contains()方法的作用是,查看对象中是否存在有输入的元素,有的话返回true,没有的话返回false,因为indexOf()>= 0意思是如果有返回下标就为true,没有就为false。

2.1.2 解释E remove(int index)的源代码

  • 下面是E remove(int index)的源代码

  • 其中rangCheck(index)方法:判断输入的下标是否越界,如果越界则返回异常IndexOutOfBoundsException

  • index表示的是下标值,因此numMoved的值即为所之后System.arraycopy方法所要复制的元素的个数。

  • System.arraycopu(elementData,index+1,elementData,index,numMoved)的意思是截取从下标为index+1开始,numMoved个元素复制到下标从index开始的元素数组当中。相当于删除了第index个元素。

  • elementData[--size] == null的意思是:将数组的最后一个位置置空

  • return oldValue:返回删除的元素。

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

  • 需要。因为ArrayList是一个对象数组,是用来存储对象的,因此不可以用来存储基本数据类型。
  • 在存储引用类型数据的时候,不需要考虑元素的具体类型,因为ArrayList类的大多数方法输入的参数都是Object类,而Object又是超级父类,因此可以不用考虑输入的元素的具体类型。

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

  • add的源代码

  • ensureExolicitCapacity(int minCapacity)方法的作用:当数组内部的最小容量大于现有长度(元素可以全部保存)时,调用grow()方法。
  • grow()方法
  • int newCapacity = oldCapacity + (oldCapacity >> 1)的意思:设置新的容量,大小为原容量的1.5倍,因为oldCapacity >> 1位运算相当于将数转换为二进制数后再向右移以为,就是除以2,因此新的容量是原来的1.5倍。
  • 如果输入的形式正确,就执行elementData = Arrays.copyOf(elementData,newCapacity)语句来将原数组copy到一个新容量数组中,之后再将要添加的元素加入到新容量数组中。

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

  • rangCheck(index)方法的功能是判断输入的下标是否越界,如果越界则返回异常IndexOutOfBoundsException。只需要在内部数组中判断即可,不需要被其他类或者外部访问,因此声明为private而不是public。

2.2. HashSet原理

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

  • 存储位置的确定:是通过哈希排序随机插空确定的存储位置。
  • 需要调用的方法: public int hashCode(),public boolean equals()这两个方法。

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

  • 将元素加入HashSet中的时间复杂度不应该是O(n),而是O(1)。因为HashSet中加入元素是通过计算当前桶中的哈希码来进行插空添加元素的,不存在与当前元素个数n有关的操作。

2.2.3 选做:尝试分析HashSet源代码后,重新解释2.1

2.3. ArrayListIntegerStack

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

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

  • 自己写的ArrayListIntegerStack函数中使用的是ArrayList来存放数据元素

  • jmu-Java-04-面向对象2-进阶-多态、接口与内部类中自定义接口ArrayIntegerStack使用的是Integer数组来存放数据元素。

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

  • 通过List接口中实现的ArrayList接口,就能够调用接口中实现的方法,如add(),remove(),size(),isEmpty()以及List子接口特有的get()方法来实现入栈、出栈、取栈顶元素、判断栈是否为空等操作。
  • 相比自定义接口中通过设置一个private int top指针的形式,要方便的多,也更加的直观。

2.4. Stack and Queue

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

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

  • 在这题当中,使用的是Queue接口中 的LinkedList实现类。
  • 建立两个队列
  • 将输入元素按编号的奇偶分配到q1,q2两个队列当中
  • 按要求格式输出队列中的元素

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

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

2.5.1 实验总结

  • 按照题目要求,所求的单词数要出去重复的单词,我们可以想到使用Set子接口来完成,又因为要求要排序所以使用Set子接口中的TreeSet实现类。

  • 要求输入以!!!!!截止,我们可以通过equals()方法除去标点符号

  • 设置一个参数foot来限制输出

3.码云及PTA

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

3.1 码云代码提交记录

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

3.2 截图PTA题集完成情况图

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

3.3 统计本周完成的代码量

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

周次 总代码量 新增代码量 总文件数 新增文件数
1 120 120 2 2
2 280 160 5 3
3 590 310 10 5
4 780 190 12 2
5 1290 510 17 5
6 1710 420 20 3
7 2513 803 24 4
8 2513 0 24 0
9 3014 501 27 3
posted @ 2017-11-11 16:57  文不盲的苏些手丶  阅读(216)  评论(1编辑  收藏  举报