1. 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。
2. 书面作业
1. ArrayList代码分析
1.1 解释ArrayList的contains
源代码
答:'contains'方法再调用indexof方法,如果indexof方法的返回值小于0,则返回false,表示不包含'o'这个对象。indexof方法是把O与数组里的所有元素一个个比较,如果有一样的则返回该元素的位置,若没有则返回-1。
1.2 解释E remove(int index)
源代码
答:首先通过rangeCheck方法判断index是否超出数组的长度,如果有提示异常,没有删除元素,再将其后面的元素向前移,使size-1的位置为null。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
答:不需要考虑元素的具体类型,因为其操作的时候都是Object类,Object类是所有类的父类。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
答:使用ensureCapacityInternal方法,在'minCapacity - elementData.length > 0'数值大于数组本身的长度,调用使用grow方法调整生成的储存容量为原先容量的1.5倍,再把原先数组复制给新的数组。
1.5 分析private void rangeCheck(int index)
源代码,为什么该方法应该声明为private而不声明为public?
答:声明为private的话只能在内部进行访问修改,外部不能调用,保证了封装性。
2. HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
答:调用方法:hashCode方法,equals方法。
存储位置:hashCode方法使用链表数组,在添加一个元素时,HashSet会先调用该对象的hashCode方法得到哈希值,再根据值确定该对象的储存位置,若已存在元素,则调用equals方法进行比较是否相同,若不同则添加到链表尾部,若相同则不添加。
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
答:时间复杂度是O(1),hash表中的元素是无序的,在添加元素时不需要遍历,直接通过哈希算法进行元素的添加,而且由前题可知它需要调用hashCode方法和equals方法。
2.3 选做:尝试分析HashSet源代码后,重新解释2.1
3. ArrayListIntegerStack
题集jmu-Java-05-集合
之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类
中的题目自定义接口ArrayIntegerStack
,有什么不同?(不要出现大段代码)
答:ArrayIntegerStack需要定义大小,会存在栈满的情况,而且可以使用指针进行添加删除;而ArrayListIntegerStack不需要定义数组的大小,且不存在栈满情况;
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
答:接口中定义了不同类的共同行为,只需要定义不同类,让他们都实现接口,这样就可以在各自的类中编写各自的实现方法,我们可以使用接口来操作不同的类,接口可以让相同的方法得到不同的实现。
4. Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack
类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号
。
答:
4.2 题集jmu-Java-05-集合
之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue
接口,并说明你使用了Queue接口的哪一个实现类?
答:Queue接口使用LinkedList实现类。
编号为奇数的顾客存到A队列,编号为偶数的顾客存到B队列。
5. 统计文字中的单词数量并按单词的字母顺序排序后输出题集jmu-Java-05-集合
之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
5.1 实验总结
答:本题需要统计单词数量及单词的出现次数,所以采用Set接口比较好,里面没有重复元素,便于统计,但又要求进行排序,所以使用TreeSet。
6. 选做:统计文字中的单词数量并按出现次数排序
题集jmu-Java-05-集合
之5-3 统计文字中的单词数量并按出现次数排序(不要出现大段代码)
6.1 伪代码
6.2 实验总结
7. 选做 面向对象设计大作业-改进
7.1 使用集合类改进大作业或者简述你的面向对象设计大作业中,哪里使用到了集合类。
7.2 进一步完善图形界面(仅需出现改进的后的图形界面截图)
参考资料:
3.1. 码云代码提交记录
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 44 | 44 | 2 | 2 |
2 | 213 | 213 | 10 | 5 |
3 | 417 | 204 | 10 | 5 |
5 | 676 | 259 | 17 | 7 |
6 | 1071 | 405 | 24 | 7 |
7 | 1780 | 709 | 30 | 6 |
8 | 1900 | 120 | 35 | 5 |
9 | 2335 | 435 | 41 | 6 |
所有评论(0)