201621123011 《Java程序设计》第8周学习总结
1. 本周学习总结
2. 书面作业
1. ArrayList代码分析
1.1 解释ArrayList的contains源代码
- 由源代码可知,ArrayList的contains方法还含有indexOf方法,当输入的对象o为空时,若elementData[i]的值为空则返回下标i,否则返回-1,当对象o不为空时,则比较o与elementData[i]相对应的值,若相同返回下标i,否则返回-1。
1.2 解释E remove(int index)源代码
E remove(int index)
函数中先用rangeCheck(int index)
函数来判断数组是否越界,若数组无越界,则将index对应元素的后面所有元素前移一位,然后将数组长度-1,将最后一个元素的值置为null,最后返回删除的值。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
- 不需要。由1.1与1.2得,数组中存放的类型都是Object类型,它是超级父类。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
- 由源代码可知,当内部数组容量不够时,会自动扩容1.5倍,之后用
Arrays.copyof()
将原数组中的元素复制到新的数组里。
1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
- 判断数组是否越界在remove中不需要被用户知道,用户只需要了解remove这个方法如何使用,并不需要了解如何判断数组越界的问题,所以该方法声明为private。
2. HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
- 首先会调用
hashCode
方法用来计算哈希值,然后通过哈希值计算出对应的储存位置,若位置上无别的值则将值添加到位置上,若位置上已经有值了,则调用equals
方法来判断值是否相同,相同则不添加,不相同,则利用冲突解决的方法进行添加操作。
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
- O(1)。因为将元素加入HashSet中只要通过计算哈希值来找到储存位置,不需要遍历。
3. ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
- 储存类型不同。自己写的ArrayListIntegerStack使用的是动态数组,而题集中自定义接口ArrayIntegerStack使用的是数组。
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
- 总的来说接口的好处就是方便灵活。因为这两题都用到了IntegerStack接口,只是其中的方法不一样,那我们要做的就只是写一个实现接口的类,然后直接更改其中的方法就可以了,方便快捷。
4. Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
- 使用了LinkedList实现类
5. 统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
5.1 实验总结
3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
1 | 0 | 0 |
---|---|---|
2 | 0 | 0 |
3 | 324 | 324 |
4 | 0 | 0 |
5 | 252 | 252 |
6 | 151 | 151 |
7 | 533 | 533 |
8 | 283 | 283 |
9 | 297 | 297 |