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 |















浙公网安备 33010602011771号