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 |