1. 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。
2. 书面作业
2.1. ArrayList代码分析
2.1.1 解释ArrayList的contains源代码
下面先让我们来看一下contains的源代码:
正如大家所看到的contains中用到了equals()进行对象之间的比较,所以contains与equals之间的关系很明显。
2.1.2 解释E remove(int index)源代码
查看E remove(int index)的源代码:
删除指定位置的元素,代码中的numremove的作用是判断待删除的元素是否为最后一个,如果不是最后一个就利用arraycopy移动,直到为待删的那个元素。
2.1.3 结合2.1.1与2.1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
答:不需要,Arraylist中存放什么类型的应该都可以,不用考虑元素的具体类型。我们都知道ArrayList存放的是Object,然而Object是所有类的父类。
2.1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
查看源代码如下:
这段代码主要的功能是实现在数组最后面添加一个元素,其中size+1是增加数组长度,保证可以添加足够多的元素。
这段代码的主要功能是实现在第i个位置添加元素
从上面这段代码中可以看出,当内部数组容量不够时会直接增加为原来容量的1.5倍。
2.1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
查看源代码如下:
被private所修饰的类,只允许被同类的调用。至于为什么用private,我觉得可能是为了防止外界其他因素的干扰吧,提高程序的稳定性。
2.2. HashSet原理
2.2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
HashSet中先根据Hashcopy()方法计算出哈希值,然后根据计算出的哈希值利用equals()的方法判断该值的位置。
2.2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
不是,为O(1)
2.2.3 选做:尝试分析HashSet源代码后,重新解释2.2.1
至于Hash中保存数值时,应该注意hashcode()和equals()方法的重写。
2.3. ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
2.3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
代码大致如下:
大致不同ArrayListIntegerStack是用ArrayList动态数组来实现栈,然而ArrayIntegerStack是用Integer数组来实现栈。
2.3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
在接口中不用考虑具体的实现,所有的具体实现均在子类中完成。在上面两个方法中我们都知道接口是相同的,只是子类中的方法不同而已。
使得代码量更少,更加简洁。
2.4. Stack and Queue
2.4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
运行结果:
2.4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
运行结果:
使用了Queue接口中的LinkedList类来实现。
2.5. 统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
这道题目统计的是文字中单词的数量,因此就想到了set()集合。后面要对单词字母排序,所以就想到了TreeSet()方法。
3.码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 502 | 502 | 5 | 5 |
4 | 1102 | 600 | 8 | 3 |
5 | 1783 | 681 | 14 | 6 |
6 | 2216 | 433 | 20 | 6 |
7 | 2833 | 617 | 28 | 8 |
8 | 3146 | 313 | 33 | 5 |
9 | 3380 | 234 | 38 | 5 |